Re: [PATCH] handle casing of i/I in Turkic languages
Corinna Vinschen <[email protected]> Fri, 24 Apr 2026 12:47:48 +0200
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
On Apr 23 15:44, Christophe Lyon wrote: > Hi! > > I'm afraid this patch breaks users of towctrans(). > Linaro CI reported this on February 25th on arm targets, and I didn't > notice any feedback? > > To be more specific, it introduces regressions when running the GCC > libstdc++ testsuite, for instance when you reach > towupper, which then calls towctrans, > The comments at the beginning of towctrans.c (and other files) say: > ---------------------------------------------- > If <[locale]> is > LC_GLOBAL_LOCALE or not a valid locale object, the behaviour is undefined. > ------------------------------------------------- > and after this patch we call: > - return towctrans_l (c, w, 0); > + return towctrans_l (c, w, LC_GLOBAL_LOCALE); > > Then, towctrans_l calls __jp2uc_l (c, locale) > and _jp2uc_l does > const char * cs = l ? __locale_charset(l) : __current_locale_charset(); > where 'l' is the locale (so LC_GLOBAL_LOCALE == -1) in this case, > and __locale_charset does: > #ifdef __HAVE_LOCALE_INFO__ > return __get_ctype_locale (locale)->codeset; > #else > return locale->ctype_codeset; > #endif > > so it dereferences a pointer with value -1 / 0xFFFFFFFF > leading to a crash. > > > Am I missing something, is this supposed to work? It's supposed to work. I pushed a patch https://sourceware.org/cgit/newlib-cygwin/commit/?id=4ba7eff4d15a Thanks, Corinna