Skip to content

Commit

Permalink
printstr_ex: fix handling of last byte when QUOTE_0_TERMINATED bit set
Browse files Browse the repository at this point in the history
* util.c (printstr_ex): Simplify handling of size == 0 case.
Do not artificially decrement size when QUOTE_0_TERMINATED bit is set.
Ensure that str[size] byte is non-zero if it hasn't been fetched.
  • Loading branch information
ldv-alt committed Nov 20, 2016
1 parent 03d65a0 commit 52b85c6
Showing 1 changed file with 6 additions and 11 deletions.
17 changes: 6 additions & 11 deletions util.c
Expand Up @@ -879,23 +879,18 @@ printstr_ex(struct tcb *tcp, long addr, long len, unsigned int user_style)
return;
}

if (style & QUOTE_0_TERMINATED) {
if (size) {
--size;
} else {
tprints((len == -1) || (len == 0) ? "\"\"" : "\"\"...");
return;
}
}
if (size > max_strlen)
size = max_strlen;
else
str[size] = '\xff';

/* If string_quote didn't see NUL and (it was supposed to be ASCIZ str
* or we were requested to print more than -s NUM chars)...
*/
ellipsis = (string_quote(str, outstr, size, style) &&
((style & QUOTE_0_TERMINATED) ||
(unsigned long) len > max_strlen));
ellipsis = string_quote(str, outstr, size, style)
&& len
&& ((style & QUOTE_0_TERMINATED)
|| (unsigned long) len > max_strlen);

tprints(outstr);
if (ellipsis)
Expand Down

0 comments on commit 52b85c6

Please sign in to comment.