Disable UUOC for cat with unquoted variable (fixes #2333)
This commit is contained in:
parent
3a296cd788
commit
ad92cb4112
|
@ -287,14 +287,14 @@ isArrayExpansion (T_DollarBraced _ _ l) =
|
||||||
isArrayExpansion _ = False
|
isArrayExpansion _ = False
|
||||||
|
|
||||||
-- Is it possible that this arg becomes multiple args?
|
-- Is it possible that this arg becomes multiple args?
|
||||||
mayBecomeMultipleArgs t = willBecomeMultipleArgs t || f t
|
mayBecomeMultipleArgs t = willBecomeMultipleArgs t || f False t
|
||||||
where
|
where
|
||||||
f (T_DollarBraced _ _ l) =
|
f quoted (T_DollarBraced _ _ l) =
|
||||||
let string = concat $ oversimplify l in
|
let string = concat $ oversimplify l in
|
||||||
"!" `isPrefixOf` string
|
not quoted || "!" `isPrefixOf` string
|
||||||
f (T_DoubleQuoted _ parts) = any f parts
|
f quoted (T_DoubleQuoted _ parts) = any (f True) parts
|
||||||
f (T_NormalWord _ parts) = any f parts
|
f quoted (T_NormalWord _ parts) = any (f quoted) parts
|
||||||
f _ = False
|
f _ _ = False
|
||||||
|
|
||||||
-- Is it certain that this word will becomes multiple words?
|
-- Is it certain that this word will becomes multiple words?
|
||||||
willBecomeMultipleArgs t = willConcatInAssignment t || f t
|
willBecomeMultipleArgs t = willConcatInAssignment t || f t
|
||||||
|
@ -302,7 +302,6 @@ willBecomeMultipleArgs t = willConcatInAssignment t || f t
|
||||||
f T_Extglob {} = True
|
f T_Extglob {} = True
|
||||||
f T_Glob {} = True
|
f T_Glob {} = True
|
||||||
f T_BraceExpansion {} = True
|
f T_BraceExpansion {} = True
|
||||||
f (T_DoubleQuoted _ parts) = any f parts
|
|
||||||
f (T_NormalWord _ parts) = any f parts
|
f (T_NormalWord _ parts) = any f parts
|
||||||
f _ = False
|
f _ = False
|
||||||
|
|
||||||
|
|
|
@ -506,7 +506,9 @@ checkWrongArithmeticAssignment _ _ = return ()
|
||||||
|
|
||||||
prop_checkUuoc1 = verify checkUuoc "cat foo | grep bar"
|
prop_checkUuoc1 = verify checkUuoc "cat foo | grep bar"
|
||||||
prop_checkUuoc2 = verifyNot checkUuoc "cat * | grep bar"
|
prop_checkUuoc2 = verifyNot checkUuoc "cat * | grep bar"
|
||||||
prop_checkUuoc3 = verify checkUuoc "cat $var | grep bar"
|
prop_checkUuoc3 = verify checkUuoc "cat \"$var\" | grep bar"
|
||||||
|
prop_checkUuoc3b = verifyNot checkUuoc "cat $var | grep bar"
|
||||||
|
prop_checkUuoc3c = verifyNot checkUuoc "cat \"${!var}\" | grep bar"
|
||||||
prop_checkUuoc4 = verifyNot checkUuoc "cat $var"
|
prop_checkUuoc4 = verifyNot checkUuoc "cat $var"
|
||||||
prop_checkUuoc5 = verifyNot checkUuoc "cat \"$@\""
|
prop_checkUuoc5 = verifyNot checkUuoc "cat \"$@\""
|
||||||
prop_checkUuoc6 = verifyNot checkUuoc "cat -n | grep bar"
|
prop_checkUuoc6 = verifyNot checkUuoc "cat -n | grep bar"
|
||||||
|
@ -659,7 +661,7 @@ prop_checkForInQuoted7 = verify checkForInQuoted "for f in ls, grep, mv; do true
|
||||||
prop_checkForInQuoted8 = verify checkForInQuoted "for f in 'ls', 'grep', 'mv'; do true; done"
|
prop_checkForInQuoted8 = verify checkForInQuoted "for f in 'ls', 'grep', 'mv'; do true; done"
|
||||||
prop_checkForInQuoted9 = verifyNot checkForInQuoted "for f in 'ls,' 'grep,' 'mv'; do true; done"
|
prop_checkForInQuoted9 = verifyNot checkForInQuoted "for f in 'ls,' 'grep,' 'mv'; do true; done"
|
||||||
checkForInQuoted _ (T_ForIn _ f [T_NormalWord _ [word@(T_DoubleQuoted id list)]] _)
|
checkForInQuoted _ (T_ForIn _ f [T_NormalWord _ [word@(T_DoubleQuoted id list)]] _)
|
||||||
| any (\x -> willSplit x && not (mayBecomeMultipleArgs x)) list
|
| any willSplit list && not (mayBecomeMultipleArgs word)
|
||||||
|| maybe False wouldHaveBeenGlob (getLiteralString word) =
|
|| maybe False wouldHaveBeenGlob (getLiteralString word) =
|
||||||
err id 2066 "Since you double quoted this, it will not word split, and the loop will only run once."
|
err id 2066 "Since you double quoted this, it will not word split, and the loop will only run once."
|
||||||
checkForInQuoted _ (T_ForIn _ f [T_NormalWord _ [T_SingleQuoted id _]] _) =
|
checkForInQuoted _ (T_ForIn _ f [T_NormalWord _ [T_SingleQuoted id _]] _) =
|
||||||
|
|
Loading…
Reference in New Issue