sbase

suckless unix tools
git clone git://git.suckless.org/sbase
Log | Files | Refs | README | LICENSE

commit 123f784ccc9138ce09176cdc2d3eae23af454941
parent d6154bd87fd04616852a286c7fd09efb4cdbfa85
Author: Evan Gates <evan.gates@gmail.com>
Date:   Mon, 24 Oct 2016 08:16:25 -0700

printf: handle \0 in %b arguments

The %b case was using fputs after unescape to print the argument, which
meant that it could not handle nul bytes. Instead, store the length
returned from unescape and use fwrite to properly handle them.

Diffstat:
Mprintf.c | 10+++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/printf.c b/printf.c @@ -19,7 +19,7 @@ int main(int argc, char *argv[]) { Rune *rarg; - size_t i, j, argi, lastargi, formatlen; + size_t i, j, argi, lastargi, formatlen, blen; long long num; double dou; int cooldown = 0, width, precision, ret = 0; @@ -112,12 +112,12 @@ main(int argc, char *argv[]) case 'b': if ((tmp = strstr(arg, "\\c"))) { *tmp = 0; - unescape(arg); - fputs(arg, stdout); + blen = unescape(arg); + fwrite(arg, sizeof(*arg), blen, stdout); return 0; } - unescape(arg); - fputs(arg, stdout); + blen = unescape(arg); + fwrite(arg, sizeof(*arg), blen, stdout); break; case 'c': unescape(arg);