jit-recording.c (dump::write): Also check vasprintf return value.
authorUros Bizjak <ubizjak@gmail.com>
Fri, 13 Mar 2015 18:09:12 +0000 (19:09 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 13 Mar 2015 18:09:12 +0000 (19:09 +0100)
* jit-recording.c (dump::write): Also check vasprintf return value.
(recording::context::add_error_va): Ditto.
(recording::string::from_printf): Ditto.

From-SVN: r221426

gcc/jit/ChangeLog
gcc/jit/jit-recording.c

index cc15f93083375a6ccb8e2c4da03e45efe2a534d0..4c02a3fe522f098284944dc02704395294c69073 100644 (file)
@@ -1,3 +1,9 @@
+2015-03-13  Uros Bizjak  <ubizjak@gmail.com>
+
+       * jit-recording.c (dump::write): Also check vasprintf return value.
+       (recording::context::add_error_va): Ditto.
+       (recording::string::from_printf): Ditto.
+
 2015-03-13  David Malcolm  <dmalcolm@redhat.com>
 
        * docs/internals/index.rst (Packaging notes): New section.
index fb0b0a9dbfa45df5c031eaf56b5d3e1c4b3fd167..32d7f31a8c353b799deda678f114175bdda9cb30 100644 (file)
@@ -77,8 +77,9 @@ dump::~dump ()
 void
 dump::write (const char *fmt, ...)
 {
+  int len;
   va_list ap;
-  char *buf = NULL;
+  char *buf;
 
   /* If there was an error opening the file, we've already reported it.
      Don't attempt further work.  */
@@ -86,10 +87,10 @@ dump::write (const char *fmt, ...)
     return;
 
   va_start (ap, fmt);
-  vasprintf (&buf, fmt, ap);
+  len = vasprintf (&buf, fmt, ap);
   va_end (ap);
 
-  if (!buf)
+  if (buf == NULL || len < 0)
     {
       m_ctxt.add_error (NULL, "malloc failure writing to dumpfile %s",
                        m_filename);
@@ -1231,22 +1232,23 @@ recording::context::add_error (location *loc, const char *fmt, ...)
 void
 recording::context::add_error_va (location *loc, const char *fmt, va_list ap)
 {
+  int len;
   char *malloced_msg;
   const char *errmsg;
   bool has_ownership;
 
   JIT_LOG_SCOPE (get_logger ());
 
-  vasprintf (&malloced_msg, fmt, ap);
-  if (malloced_msg)
+  len = vasprintf (&malloced_msg, fmt, ap);
+  if (malloced_msg == NULL || len < 0)
     {
-      errmsg = malloced_msg;
-      has_ownership = true;
+      errmsg = "out of memory generating error message";
+      has_ownership = false;
     }
   else
     {
-      errmsg = "out of memory generating error message";
-      has_ownership = false;
+      errmsg = malloced_msg;
+      has_ownership = true;
     }
   if (get_logger ())
     get_logger ()->log ("error %i: %s", m_error_count, errmsg);
@@ -1709,15 +1711,16 @@ recording::string::~string ()
 recording::string *
 recording::string::from_printf (context *ctxt, const char *fmt, ...)
 {
+  int len;
   va_list ap;
-  char *buf = NULL;
+  char *buf;
   recording::string *result;
 
   va_start (ap, fmt);
-  vasprintf (&buf, fmt, ap);
+  len = vasprintf (&buf, fmt, ap);
   va_end (ap);
 
-  if (!buf)
+  if (buf == NULL || len < 0)
     {
       ctxt->add_error (NULL, "malloc failure");
       return NULL;