aboutsummaryrefslogtreecommitdiff
path: root/gdb/objc-lang.c
diff options
context:
space:
mode:
authorAndreas Arnez <arnez at linux dot vnet dot ibm dot com>2013-11-12 18:03:54 +0100
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2013-11-12 19:03:02 +0100
commitee7615e1f3384c36e41fdf176abdabf8f21d1505 (patch)
tree6efd5acf94248e865510cf535ae8ab76b07a020a /gdb/objc-lang.c
parent8943b874760d9cf35b71890a70af9866e4fab2a6 (diff)
downloadgdb-ee7615e1f3384c36e41fdf176abdabf8f21d1505.zip
gdb-ee7615e1f3384c36e41fdf176abdabf8f21d1505.tar.gz
gdb-ee7615e1f3384c36e41fdf176abdabf8f21d1505.tar.bz2
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.
Diffstat (limited to 'gdb/objc-lang.c')
-rw-r--r--gdb/objc-lang.c5
1 files changed, 5 insertions, 0 deletions
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),