* infcmd.c (step_1): Put thread id on the stack to avoid possible
authorPedro Alves <palves@redhat.com>
Mon, 5 May 2008 16:41:42 +0000 (16:41 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 5 May 2008 16:41:42 +0000 (16:41 +0000)
NULL dereferencing.

gdb/ChangeLog
gdb/infcmd.c

index 05a741b98bc4d29b02d048dfcdc991a0043080b1..7c3c75b34442be5950feb272590e835328cf67a2 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-05  Pedro Alves  <pedro@codesourcery.com>
+
+       * infcmd.c (step_1): Put thread id on the stack to avoid possible
+       NULL dereferencing.
+
 2008-05-05  Luis Machado  <luisgpm@br.ibm.com>
 
        * symfile.c (reread_symbols): Update objfile's entry point.
index b75c524413022e7999e919d831b7b5e41dd44a1b..f5d7c50bb6064a596cd1d72c66d140c3dffd1202 100644 (file)
@@ -706,7 +706,7 @@ step_1 (int skip_subroutines, int single_inst, char *count_string)
   struct frame_info *frame;
   struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
   int async_exec = 0;
-  int *thread_p = NULL;
+  int thread = -1;
 
   ERROR_NO_INFERIOR;
 
@@ -730,17 +730,12 @@ step_1 (int skip_subroutines, int single_inst, char *count_string)
 
   if (!single_inst || skip_subroutines)                /* leave si command alone */
     {
-      thread_p = xmalloc (sizeof (int));
-      make_cleanup (xfree, thread_p);
-
       if (in_thread_list (inferior_ptid))
-       *thread_p = pid_to_thread_id (inferior_ptid);
-      else
-       *thread_p = -1;
+       thread = pid_to_thread_id (inferior_ptid);
 
       set_longjmp_breakpoint ();
 
-      make_cleanup (delete_longjmp_breakpoint_cleanup, thread_p);
+      make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
     }
 
   /* In synchronous case, all is well, just use the regular for loop. */
@@ -801,11 +796,10 @@ which has no line number information.\n"), name);
      and handle them one at the time, through step_once(). */
   else
     {
-      step_once (skip_subroutines, single_inst, count, *thread_p);
+      step_once (skip_subroutines, single_inst, count, thread);
       /* We are running, and the continuation is installed.  It will
         disable the longjmp breakpoint as appropriate.  */
       discard_cleanups (cleanups);
-      xfree (thread_p);
     }
 }