dc: Parse error & fix out of bounds read in xc_program_printString
function old new delta xc_program_print 712 735 +23 Signed-off-by: Brian Foley <bpfoley@google.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b64470be17
commit
10509a70ee
@ -5456,11 +5456,13 @@ static void xc_program_printString(const char *str)
|
|||||||
char *n;
|
char *n;
|
||||||
|
|
||||||
c = *str++;
|
c = *str++;
|
||||||
n = strchr(esc, c); // note: c can be NUL
|
n = strchr(esc, c); // note: if c is NUL, n = \0 at end of esc
|
||||||
if (!n) {
|
if (!n || !c) {
|
||||||
// Just print the backslash and following character
|
// Just print the backslash and following character
|
||||||
bb_putchar('\\');
|
bb_putchar('\\');
|
||||||
++G.prog.nchars;
|
++G.prog.nchars;
|
||||||
|
// But if we're at the end of the string, stop
|
||||||
|
if (!c) break;
|
||||||
} else {
|
} else {
|
||||||
if (n - esc == 0) // "\n" ?
|
if (n - esc == 0) // "\n" ?
|
||||||
G.prog.nchars = SIZE_MAX;
|
G.prog.nchars = SIZE_MAX;
|
||||||
|
@ -59,6 +59,26 @@ testing "dc: x should work with strings created from a" \
|
|||||||
"42\n" \
|
"42\n" \
|
||||||
"" ""
|
"" ""
|
||||||
|
|
||||||
|
testing "dc: p should print invalid escapes" \
|
||||||
|
"dc -e '[\q] p'" \
|
||||||
|
"\\q\n" \
|
||||||
|
"" ""
|
||||||
|
|
||||||
|
testing "dc: p should print trailing backslashes" \
|
||||||
|
"dc -e '[q\] p'" \
|
||||||
|
"q\\\\\n" \
|
||||||
|
"" ""
|
||||||
|
|
||||||
|
testing "dc: p should parse/print single backslashes" \
|
||||||
|
"dc -e '[\] p'" \
|
||||||
|
"\\\\\n" \
|
||||||
|
"" ""
|
||||||
|
|
||||||
|
testing "dc: p should print single backslash strings" \
|
||||||
|
"dc -e '92 a p'" \
|
||||||
|
"\\\\\n" \
|
||||||
|
"" ""
|
||||||
|
|
||||||
testing "dc read" \
|
testing "dc read" \
|
||||||
"dc -finput" \
|
"dc -finput" \
|
||||||
"2\n9\n1\n" \
|
"2\n9\n1\n" \
|
||||||
|
Loading…
Reference in New Issue
Block a user