OSDN Git Service

Avoid NULL dereference.
authorJan Kratochvil <jan.kratochvil@redhat.com>
Wed, 11 Feb 2009 16:07:28 +0000 (16:07 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Wed, 11 Feb 2009 16:07:28 +0000 (16:07 +0000)
* stack.c (return_command): Guard use of SYMBOL_TYPE (thisfun).
New variable func_type.

gdb/ChangeLog
gdb/stack.c

index de85aa4..107c3e1 100644 (file)
@@ -1,3 +1,10 @@
+2009-02-11  Jim Meyering  <meyering@redhat.com>
+           Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       Avoid NULL dereference.
+       * stack.c (return_command): Guard use of SYMBOL_TYPE (thisfun).
+       New variable func_type.
+
 2009-02-11  Pedro Alves  <pedro@codesourcery.com>
 
        * gdbarch.c: Regenerate.
index a1a7696..3bcf758 100644 (file)
@@ -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*/);
     }