newlocale(3) appears to be broken?
Steve Kargl
sgk at troutmask.apl.washington.edu
Fri Apr 24 10:57:19 UTC 2015
On Fri, Apr 24, 2015 at 10:31:14AM +0100, David Chisnall wrote:
> On 23 Apr 2015, at 19:29, Steve Kargl <sgk at troutmask.apl.washington.edu> wrote:
> >
> > It appears that newlocale(3) is broken.
> >
> > % cat r.c
> >
> > #include <locale.h>
> >
> > int
> > main(void)
> > {
> > locale_t a;
> > a = newlocale(0, "C", 0);
> > if (a)
> > return 0;
> > else
> > return 1;
> > }
> >
> > troutmask:sgk[206] cc -o z -static r.c && ./z
> > Segmentation fault (core dumped)
> >
> > troutmask:sgk[206] cc -o z -static r.c && ./z
> > Segmentation fault (core dumped)
> > troutmask:sgk[207] gdb782 z z.core
> > [New process 100313]
> > Core was generated by `z'.
> > Program terminated with signal SIGSEGV, Segmentation fault.
> > #0 0x0000000000415798 in newlocale ()
> > (gdb) bt
> > #0 0x0000000000415798 in newlocale ()
> > #1 0x0000000000400434 in main ()
>
> I can reproduce this, though only with static linking. Omitting the -static results in the program working correctly. It appears to be caused by __xlocale_C_ctype being declared const, so the reference count manipulation causes segmentation faults. I???m a bit surprised that this doesn???t happen in the dynamically linked version. I???m testing a fix now.
>
> David
I saw your commit. Thanks for fixing this so quickly!
--
Steve
More information about the freebsd-standards
mailing list