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
signature.asc
Description: OpenPGP digital signature
