From: Dmitry V. Levin Date: Sat, 19 Nov 2016 21:01:03 +0000 (+0000) Subject: printstr_ex: handle QUOTE_0_TERMINATED bit consistently X-Git-Tag: v4.15~109 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=03d65a05b9f31b26573a8282d2da9f15c602a6cd;p=strace printstr_ex: handle QUOTE_0_TERMINATED bit consistently When user_style has QUOTE_0_TERMINATED bit set, printstr_ex prints the fetched string as a NUL-terminated. After this change, the string is being fetched as a NUL-terminated, too. * util.c (printstr_ex): Use umovestr instead of umoven if QUOTE_0_TERMINATED bit is set. --- diff --git a/util.c b/util.c index 54a77e69..0279705a 100644 --- a/util.c +++ b/util.c @@ -827,8 +827,12 @@ printpath(struct tcb *tcp, long addr) /* * Print string specified by address `addr' and length `len'. - * If `len' < 0, treat the string as a NUL-terminated string. - * If string length exceeds `max_strlen', append `...' to the output. + * If `len' == -1, set QUOTE_0_TERMINATED bit in `user_style'. + * If `user_style' has QUOTE_0_TERMINATED bit set, treat the string + * as a NUL-terminated string. + * Pass `user_style' on to `string_quote'. + * Append `...' to the output if either the string length exceeds `max_strlen', + * or `len' != -1 and the string length exceeds `len'. */ void printstr_ex(struct tcb *tcp, long addr, long len, unsigned int user_style) @@ -865,7 +869,10 @@ printstr_ex(struct tcb *tcp, long addr, long len, unsigned int user_style) } else { if (size > (unsigned long) len) size = (unsigned long) len; - rc = umoven(tcp, addr, size, str); + if (style & QUOTE_0_TERMINATED) + rc = umovestr(tcp, addr, size, str); + else + rc = umoven(tcp, addr, size, str); } if (rc < 0) { printaddr(addr);