summaryrefslogtreecommitdiff
path: root/miscutils/bc.c
diff options
context:
space:
mode:
authorBrian Foley2019-09-05 10:53:21 +0200
committerDenys Vlasenko2019-10-21 16:54:40 +0200
commit2f3352682e3e0f62aca80c12e64d4509e48df465 (patch)
tree1574992fb1f7a7ee36d122d53d84ab6c8c1fe868 /miscutils/bc.c
parent50ba92128b0a6472a3a85efaaa8ce3bfbda1bce5 (diff)
downloadbusybox-2f3352682e3e0f62aca80c12e64d4509e48df465.zip
busybox-2f3352682e3e0f62aca80c12e64d4509e48df465.tar.gz
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>
Diffstat (limited to 'miscutils/bc.c')
-rw-r--r--miscutils/bc.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 44c70ca..e880293 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -5456,11 +5456,13 @@ static void xc_program_printString(const char *str)
char *n;
c = *str++;
- n = strchr(esc, c); // note: c can be NUL
- if (!n) {
+ n = strchr(esc, c); // note: if c is NUL, n = \0 at end of esc
+ if (!n || !c) {
// Just print the backslash and following character
bb_putchar('\\');
++G.prog.nchars;
+ // But if we're at the end of the string, stop
+ if (!c) break;
} else {
if (n - esc == 0) // "\n" ?
G.prog.nchars = SIZE_MAX;