|
Message-ID: <5041927.IR2Ri05J2P@linuix> Date: Tue, 19 Jun 2012 12:45:50 +0200 From: Bruno Haible <bruno@...sp.org> To: bug-gnulib@....org Cc: Rich Felker <dalias@...ifal.cx>, musl@...ts.openwall.com, Isaac Dunham <idunham@...abit.com> Subject: Re: musl, printf out-of-memory test Rich Felker wrote: > > Replacements of *printf, because of > > [...] > > checking whether printf survives out-of-memory conditions... no > > No idea. Copying out the test and running it directly, it passes just > fine for me. Maybe gnulib has already replaced printf with its own > malloc-using version by the time it gets to this test?? Strange indeed. With a testdir of all of gnulib, I got configure:17615: checking whether printf survives out-of-memory conditions configure:17786: /arch/x86-linux/inst-musl/bin/musl-gcc -std=gnu99 -o conftest -g -O2 -Wall conftest.c >&5 configure:17789: $? = 0 configure:17837: result: yes but with a testdir of only the POSIX related modules of gnulib, I got configure:13657: checking whether printf survives out-of-memory conditions configure:13828: /arch/x86-linux/inst-musl/bin/musl-gcc -std=gnu99 -o conftest -g -O2 -Wall conftest.c >&5 configure:13831: $? = 0 configure:13879: result: no The '$? = 0' line prints only the linker's exit code, not the runtime exit code. I'm adding a second output line for the runtime exit code. Then I get: configure:8919: checking whether printf survives out-of-memory conditions configure:9090: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 -Wall conftest.c >&5 configure:9093: $? = 0 configure:9097: $? = 1 configure:9142: result: no After adding a printf to stderr: Once I get configure:8919: checking whether printf survives out-of-memory conditions configure:9093: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 -Wall conftest.c >&5 configure:9096: $? = 0 printf's return value = 5000002, errno = 0 configure:9100: $? = 0 configure:9145: result: yes In another configure run I get: configure:8919: checking whether printf survives out-of-memory conditions configure:9093: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 -Wall conftest.c >&5 configure:9096: $? = 0 configure:9100: $? = 1 configure:9145: result: no So, the exit code 1 must have come from the crash handler. Without this crash handler: 7x I get configure:8919: checking whether printf survives out-of-memory conditions configure:8979: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 -Wall conftest.c >&5 configure:8982: $? = 0 printf's return value = 5000002, errno = 0 configure:8986: $? = 0 configure:9031: result: yes but once I get configure:8979: /arch/x86-linux/inst-musl/bin/musl-gcc -o conftest -g -O2 -Wall conftest.c >&5 configure:8982: $? = 0 configure:8986: $? = 139 configure:9031: result: no So, apparently, under memory stress, musl's printf has a probability of between 10% and 50% of crashing with SIGSEGV (139 = 128 + 11). Bruno 2012-06-19 Bruno Haible <bruno@...sp.org> *printf-posix: Put more info into config.log. * m4/printf.m4 (gl_PRINTF_ENOMEM): Emit conftest's error output and exit code into config.log. --- m4/printf.m4.orig Tue Jun 19 12:41:56 2012 +++ m4/printf.m4 Tue Jun 19 12:41:53 2012 @@ -1,4 +1,4 @@ -# printf.m4 serial 48 +# printf.m4 serial 49 dnl Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -1028,8 +1028,9 @@ changequote([,])dnl ])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then - (./conftest + (./conftest 2>&AS_MESSAGE_LOG_FD result=$? + _AS_ECHO_LOG([\$? = $result]) if test $result != 0 && test $result != 77; then result=1; fi exit $result ) >/dev/null 2>/dev/null
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.