Re: [PATCH] handle casing of i/I in Turkic languages

Corinna Vinschen <[email protected]> Mon, 27 Apr 2026 10:37:55 +0200
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
On Apr 27 09:39, Christophe Lyon wrote:
> On Fri, Apr 24, 2026 at 12:47 PM Corinna Vinschen <[email protected]> wrote:
> >
> > 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
> >
> 
> I confirm the GCC test now passes, thanks!

Great, thanks for testing!


Corinna