Fix undefined behavior, don't pass NULL to fwrite
authorSimon Marchi <simon.marchi@ericsson.com>
Fri, 5 Oct 2018 02:43:27 +0000 (22:43 -0400)
committerSimon Marchi <simon.marchi@ericsson.com>
Fri, 5 Oct 2018 02:59:44 +0000 (22:59 -0400)
If a vector that we try to write using file_write is empty, we may end
up passing NULL to fwrite, which triggers UBSan:

  .../gdb/dwarf-index-write.c:73:14: runtime error: null pointer passed as argument 1, which is declared to never be null

Avoid it by skipping the write if the vector is empty.

gdb/ChangeLog:

* dwarf-index-write.c (file_write): Don't write if the vector is
empty.

gdb/ChangeLog
gdb/dwarf-index-write.c

index 126deb7893c665d93e67caace34135d1e2d4266d..0e5a3f482c5f59a77d4851ab808ed3432ae657ee 100644 (file)
@@ -1,3 +1,8 @@
+2018-10-04  Simon Marchi  <simon.marchi@ericsson.com>
+
+       * dwarf-index-write.c (file_write): Don't write if the vector is
+       empty.
+
 2018-10-05  Tom de Vries  <tdevries@suse.de>
 
        * python/py-progspace.c (pspy_solib_name): Fix type mismatch in
index 252032161fb47a987eabbc958ec07dde0c21ff4c..d4585af837cd080ede9fcff4ef0def0d6a9d6a9e 100644 (file)
@@ -80,7 +80,8 @@ template<typename Elem, typename Alloc>
 static void
 file_write (FILE *file, const std::vector<Elem, Alloc> &vec)
 {
-  file_write (file, vec.data (), vec.size () * sizeof (vec[0]));
+  if (!vec.empty ())
+    file_write (file, vec.data (), vec.size () * sizeof (vec[0]));
 }
 
 /* In-memory buffer to prepare data to be written later to a file.  */