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.
master
Evan Gates 7 years ago committed by Laslo Hunhold
parent d6154bd87f
commit 123f784ccc

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

Loading…
Cancel
Save