From 02fbc9304766269cbfd1eb4490658c662ff6c638 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Tue, 8 Aug 2023 14:14:30 -0500 Subject: [PATCH] Fix \0 in %b --- tests/printf.test | 2 ++ toys/posix/printf.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/printf.test b/tests/printf.test index 200e2d55..57f2a283 100755 --- a/tests/printf.test +++ b/tests/printf.test @@ -85,3 +85,5 @@ testcmd "invalid oct" "'one\079two'" "one\a9two" "" "" # extension for ESC testcmd "%b \e" "'%b' '\\e' | xxd -p" "1b\n" "" "" testcmd "\e" "'\\e' | xxd -p" "1b\n" "" "" + +testcmd '\0 in %b' '%b ab\\x07\\0x07 | xxd -p' '61620700783037\n' '' '' diff --git a/toys/posix/printf.c b/toys/posix/printf.c index 93374731..c80e6fe4 100644 --- a/toys/posix/printf.c +++ b/toys/posix/printf.c @@ -46,6 +46,7 @@ static int handle_slash(char **esc_val, int posix) else { if (posix && *ptr=='0') ptr++; if (*ptr >= '0' && *ptr <= '7') base = 8; + else if (ptr != *esc_val) goto done; } len = (char []){0,3,2}[base/8]; @@ -69,6 +70,7 @@ static int handle_slash(char **esc_val, int posix) ptr++; len--; } +done: *esc_val = ptr; return result; -- 2.39.2