This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix GDB crash with upstream GCC due to qsort(NULL, ...)


Upstream GCC's new pass '-fisolate-erroneous-paths' may introduce
traps at places where GCC has determined undefined behavior, e.g. when
passing a NULL pointer to a function that defines this argument as
__attribute__(__nonnull__(...)).  In particular this applies to
uniquify_strings(), because it invokes qsort() with NULL when the
'strings' vector is empty.  I hit this problem on s390x when trying to
execute "break main" on a C program.

gdb/
2013-11-12  Andreas Arnez  <arnez@linux.vnet.ibm.com>

	* objc-lang.c (uniquify_strings): Prevent invoking qsort with
	NULL.
---
 gdb/objc-lang.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index 77a61ac..5c72340 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -1056,6 +1056,11 @@ uniquify_strings (VEC (const_char_ptr) **strings)
   const char *elem, *last = NULL;
   int out;
 
+  /* If the vector is empty, there's nothing to do.  This explicit
+     check is needed to avoid invoking qsort with NULL. */
+  if (VEC_empty (const_char_ptr, *strings))
+    return;
+
   qsort (VEC_address (const_char_ptr, *strings),
 	 VEC_length (const_char_ptr, *strings),
 	 sizeof (const_char_ptr),
-- 
1.7.11.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]