Yes, my script was crap, I've fixed it. Here's the reproducer. Called with foo unset. I think it doesn't crash without -x. #!/bin/dash set -x test ! $foo On Mon, Apr 8, 2013 at 8:08 PM, Eric Blake <eblake@xxxxxxxxxx> wrote: > 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 > -- To unsubscribe from this list: send the line "unsubscribe dash" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html