PR c++/81586 - valgrind error in output_buffer_append_r with -Wall
authorMartin Sebor <msebor@redhat.com>
Thu, 10 Aug 2017 17:40:11 +0000 (17:40 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Thu, 10 Aug 2017 17:40:11 +0000 (11:40 -0600)
gcc/ChangeLog:

PR c++/81586
* pretty-print.c (pp_format): Correct the handling of %s precision.

From-SVN: r251029

gcc/ChangeLog
gcc/pretty-print.c

index 95d07f6de140bfa211564ff0f860b26e2fe8f4cf..c49cb4aad016ea90e8295b441d575bdd763809bd 100644 (file)
@@ -1,3 +1,8 @@
+2017-08-10  Martin Sebor  <msebor@redhat.com>
+
+       PR c++/81586
+       * pretty-print.c (pp_format): Correct the handling of %s precision.
+
 2017-08-10  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/81736
index 570dec77dc1b9df56bddb320c543ab2201c9798c..556462fafe7e6e9b1f2cb10d192a15d4d3c63b1f 100644 (file)
@@ -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;