From ac8b6a494fb279bbd62d16db16b3dc74c530ef76 Mon Sep 17 00:00:00 2001 From: msebor Date: Thu, 10 Aug 2017 17:40:11 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@251029 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/pretty-print.c | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 95d07f6de14..c49cb4aad01 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-08-10 Martin Sebor + + PR c++/81586 + * pretty-print.c (pp_format): Correct the handling of %s precision. + 2017-08-10 H.J. Lu PR target/81736 diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c index 570dec77dc1..556462fafe7 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; -- 2.11.4.GIT