ash: fix escaping of a few characters (broken by last commits)
No binary (build failed)
—
(log yok)
| @@ -5939,12 +5939,17 @@ rmescapes(char *str, int flag) | |
| * (for example, glibc <= 2.22). | |
| * | |
| * Lets add "\" only on the chars which need it. | |
| + | * Testcases for less obvious chars are shown. |
| */ | |
| if (*p == '*' | |
| || *p == '?' | |
| || *p == '[' | |
| - | /* || *p == ']' maybe also this? */ |
| - | || *p == '\\' |
| + | || *p == '\\' /* case '\' in \\ ) echo ok;; *) echo WRONG;; esac */ |
| + | || *p == ']' /* case ']' in [a\]] ) echo ok;; *) echo WRONG;; esac */ |
| + | || *p == '-' /* case '-' in [a\-c]) echo ok;; *) echo WRONG;; esac */ |
| + | || *p == '!' /* case '!' in [\!] ) echo ok;; *) echo WRONG;; esac */ |
| + | /* Some libc support [^negate], that's why "^" also needs love */ |
| + | || *p == '^' /* case '^' in [\^] ) echo ok;; *) echo WRONG;; esac */ |
| ) { | |
| *q++ = '\\'; | |
| } | |
| @@ -0,0 +1,35 @@ | |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| + | ok |
| @@ -0,0 +1,41 @@ | |
| + | # Testing glob-escaping of every ASCII punctuation char |
| + | # Some chars have more than one test |
| + | # 21..2f |
| + | case '!' in [\!] ) echo ok;; *) echo 'WRONG!';; esac |
| + | case '"' in [\"] ) echo ok;; *) echo 'WRONG"';; esac |
| + | case '#' in [\#] ) echo ok;; *) echo 'WRONG#';; esac |
| + | case '$' in [\$] ) echo ok;; *) echo 'WRONG$';; esac |
| + | case '%' in [\%] ) echo ok;; *) echo 'WRONG%';; esac |
| + | case '&' in [\&] ) echo ok;; *) echo 'WRONG&';; esac |
| + | case "'" in [\'] ) echo ok;; *) echo "WRONG'";; esac |
| + | case '(' in [\(] ) echo ok;; *) echo 'WRONG(';; esac |
| + | case ')' in [\)] ) echo ok;; *) echo 'WRONG)';; esac |
| + | case '*' in [\*] ) echo ok;; *) echo 'WRONG*';; esac |
| + | case '+' in [\+] ) echo ok;; *) echo 'WRONG+';; esac |
| + | case ',' in [\,] ) echo ok;; *) echo 'WRONG,';; esac |
| + | case '-' in [\-] ) echo ok;; *) echo 'WRONG-';; esac |
| + | case '-' in [a\-c]) echo ok;; *) echo 'WRONGa\-c';; esac |
| + | case '.' in [\.] ) echo ok;; *) echo 'WRONG.';; esac |
| + | case '/' in [\/] ) echo ok;; *) echo 'WRONG/';; esac |
| + | # 3a..40 |
| + | case ':' in [\:] ) echo ok;; *) echo 'WRONG:';; esac |
| + | case ';' in [\;] ) echo ok;; *) echo 'WRONG;';; esac |
| + | case '<' in [\<] ) echo ok;; *) echo 'WRONG<';; esac |
| + | case '=' in [\=] ) echo ok;; *) echo 'WRONG=';; esac |
| + | case '>' in [\>] ) echo ok;; *) echo 'WRONG>';; esac |
| + | case '?' in [\?] ) echo ok;; *) echo 'WRONG?';; esac |
| + | case '@' in [\@] ) echo ok;; *) echo 'WRONG@';; esac |
| + | # 5b..60 |
| + | case '[' in [\[] ) echo ok;; *) echo 'WRONG[';; esac |
| + | case '\' in [\\] ) echo ok;; *) echo 'WRONG\';; esac |
| + | case '\' in \\ ) echo ok;; *) echo 'WRONG\\';; esac |
| + | case ']' in [\]] ) echo ok;; *) echo 'WRONG]';; esac |
| + | case ']' in [a\]]) echo ok;; *) echo 'WRONGa]';; esac |
| + | case '^' in [\^] ) echo ok;; *) echo 'WRONG^';; esac |
| + | case '_' in [\_] ) echo ok;; *) echo 'WRONG_';; esac |
| + | case '`' in [\`] ) echo ok;; *) echo 'WRONG`';; esac |
| + | # 7b..7e |
| + | case '{' in [\{] ) echo ok;; *) echo 'WRONG{';; esac |
| + | case '|' in [\|] ) echo ok;; *) echo 'WRONG|';; esac |
| + | case '}' in [\}] ) echo ok;; *) echo 'WRONG}';; esac |
| + | case '~' in [\~] ) echo ok;; *) echo 'WRONG~';; esac |