On 04/08/2013 08:43 PM, Dan Kegel wrote: > If I check for an empty string like this: > > + test ! $foo You know, this is highly reliant on $foo expanding to either nothing (it is empty, so you are really invoking the one-argument form 'test !' which is true) or a single shell word (the two-argument form 'test ! nonempty' is false). But if $foo has embedded whitespace, it expands to more than one word after word-splitting, and you're hosed ('test ! one two' can give interesting results, and probably not what you were expecting). You might want to fix your script to just use the safer: ! test "$foo" which works even if $foo has embedded whitespace. That said, you are correct that dash should never crash. > > dash crashes. This occurs both in the version shipped with ubuntu > 10.04 and 12.04 > as well as with dash from git. > > Here's the stack: > > Program received signal SIGSEGV, Segmentation fault. > __strcmp_sse4_2 () at ../sysdeps/i386/i686/multiarch/strcmp-sse4.S:221 > 221 ../sysdeps/i386/i686/multiarch/strcmp-sse4.S: No such file or directory. > (gdb) bt > #0 __strcmp_sse4_2 () at ../sysdeps/i386/i686/multiarch/strcmp-sse4.S:221 > #1 0x0805938a in getop (s=0x202b <Address 0x202b out of bounds>) at > bltin/test.c:168 > #2 0x08059c91 in t_lex (tp=0x806581c) at bltin/test.c:431 > #3 0x080595cb in aexpr (n=UNOT) at bltin/test.c:260 > #4 0x08059557 in oexpr (n=UNOT) at bltin/test.c:243 > #5 0x080594ba in testcmd (argc=1, argv=0x8065814) at bltin/test.c:219 > #6 0x0804c526 in evalbltin (cmd=0x805da1c, argc=2, argv=0x8065810, > flags=0) at eval.c:910 and given this part of the stack trace, it looks like you were invoking 'test ! word'? But I was unable to reproduce a crash when I tried dash.git, so it would be helpful to know exactly what $foo was in your reproducer. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature