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.
This commit is contained in:
Evan Gates 2016-10-24 08:16:25 -07:00 committed by Laslo Hunhold
parent d6154bd87f
commit 123f784ccc

View File

@ -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);