From 1424a5757dc0468db2f20be1ab9945a67da23931 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Wed, 11 Feb 2009 16:07:28 +0000 Subject: [PATCH] Avoid NULL dereference. * stack.c (return_command): Guard use of SYMBOL_TYPE (thisfun). New variable func_type. --- gdb/ChangeLog | 7 +++++++ gdb/stack.c | 11 +++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index de85aa4917..107c3e1176 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2009-02-11 Jim Meyering + Jan Kratochvil + + Avoid NULL dereference. + * stack.c (return_command): Guard use of SYMBOL_TYPE (thisfun). + New variable func_type. + 2009-02-11 Pedro Alves * gdbarch.c: Regenerate. diff --git a/gdb/stack.c b/gdb/stack.c index a1a7696562..3bcf758429 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -1823,7 +1823,8 @@ return_command (char *retval_exp, int from_tty) is discarded, side effects such as "return i++" still occur. */ return_value = NULL; - else if (using_struct_return (SYMBOL_TYPE (thisfun), return_type)) + else if (thisfun != NULL + && using_struct_return (SYMBOL_TYPE (thisfun), return_type)) { query_prefix = "\ The location at which to store the function's return value is unknown.\n\ @@ -1856,10 +1857,12 @@ If you continue, the return value that you specified will be ignored.\n"; { struct type *return_type = value_type (return_value); struct gdbarch *gdbarch = get_regcache_arch (get_current_regcache ()); - gdb_assert (gdbarch_return_value (gdbarch, SYMBOL_TYPE (thisfun), - return_type, NULL, NULL, NULL) + struct type *func_type = thisfun == NULL ? NULL : SYMBOL_TYPE (thisfun); + + gdb_assert (gdbarch_return_value (gdbarch, func_type, return_type, NULL, + NULL, NULL) == RETURN_VALUE_REGISTER_CONVENTION); - gdbarch_return_value (gdbarch, SYMBOL_TYPE (thisfun), return_type, + gdbarch_return_value (gdbarch, func_type, return_type, get_current_regcache (), NULL /*read*/, value_contents (return_value) /*write*/); } -- 2.11.0