This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Fix GDB crash with upstream GCC due to qsort(NULL, ...)
- From: Andreas Arnez <arnez at linux dot vnet dot ibm dot com>
- To: gdb-patches at sourceware dot org
- Cc: Ulrich Weigand <uweigand at de dot ibm dot com>, Andreas Krebbel <krebbel at linux dot vnet dot ibm dot com>
- Date: Tue, 12 Nov 2013 18:03:54 +0100
- Subject: [PATCH] Fix GDB crash with upstream GCC due to qsort(NULL, ...)
- Authentication-results: sourceware.org; auth=none
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