aboutsummaryrefslogtreecommitdiff
path: root/gcc/pretty-print.c
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2017-08-10 17:40:11 +0000
committerMartin Sebor <msebor@gcc.gnu.org>2017-08-10 11:40:11 -0600
commit0a8923facae32e5cb1886f885fb5eb64d4614b73 (patch)
tree3afaf3d6aadaa7921da6fe96079ae94f771e04cf /gcc/pretty-print.c
parent8e941ae950ddce1745b4d6819a7131908dd7de24 (diff)
downloadgcc-0a8923facae32e5cb1886f885fb5eb64d4614b73.zip
gcc-0a8923facae32e5cb1886f885fb5eb64d4614b73.tar.gz
gcc-0a8923facae32e5cb1886f885fb5eb64d4614b73.tar.bz2
PR c++/81586 - valgrind error in output_buffer_append_r with -Wall
gcc/ChangeLog: PR c++/81586 * pretty-print.c (pp_format): Correct the handling of %s precision. From-SVN: r251029
Diffstat (limited to 'gcc/pretty-print.c')
-rw-r--r--gcc/pretty-print.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c
index 570dec7..556462f 100644
--- a/gcc/pretty-print.c
+++ b/gcc/pretty-print.c
@@ -667,7 +667,17 @@ pp_format (pretty_printer *pp, text_info *text)
}
s = va_arg (*text->args_ptr, const char *);
- pp_append_text (pp, s, s + n);
+
+ /* Negative precision is treated as if it were omitted. */
+ if (n < 0)
+ n = INT_MAX;
+
+ /* Append the lesser of precision and strlen (s) characters. */
+ size_t len = strlen (s);
+ if ((unsigned) n < len)
+ len = n;
+
+ pp_append_text (pp, s, s + len);
}
break;