• Stephen Warren's avatar
    hush: fix some quoted variable expansion issues · fe9ca3d3
    Stephen Warren authored
    The following shell command fails:
    
    if test -z "$x"; then echo "zero"; else echo "non-zero"; fi
    
    (assuming $x does not exist, it prints "non-zero" rather than "zero").
    
    ... since "$x" expands to nothing, and the argument is completely
    dropped, causing too few to be passed to -z, causing cmd_test() to
    error out early.
    
    This is because when variable expansions are processed by make_string(),
    the expanded results are concatenated back into a new string. However,
    no quoting is applied when doing so, so any empty variables simply don't
    generate any parameter when the combined string is parsed again.
    
    Fix this by explicitly replacing quoting any argument that was originally
    quoted when re-generating a string from the already-parsed argument list.
    
    This also fixes loss of whitespace in commands such as:
    
    setenv space " "
    setenv var " 1${space}${space} 2 "
    echo ">>${var}<<"
    Reported-by: 's avatarRussell King <linux@arm.linux.org.uk>
    Acked-by: 's avatarSimon Glass <sjg@chromium.org>
    Signed-off-by: 's avatarStephen Warren <swarren@wwwdotorg.org>
    fe9ca3d3
command_ut.c 5.32 KB