Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Re: bug in gdb/target.c:target_signal_to_name
       [not found] <Pine.OSF.4.33.0111301833160.4557-100000@eryx1.zcu.cz>
@ 2002-01-13 13:10 ` Andrew Cagney
  2002-01-13 13:13   ` Daniel Jacobowitz
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Cagney @ 2002-01-13 13:10 UTC (permalink / raw)
  To: Petr Ledvina; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 776 bytes --]

> When remote target returns some invalid signal, gdb vill crash with
> segfault. The problem seems to be in function target_signal_to_name,
> which doesn't check, if signal is in bounds and returns invalid name.
> 
> This version will (at least) not segfault:
> 
> /* Return the name for a signal.  */
> char *
> target_signal_to_name (sig)
>      enum target_signal sig;
> {
>   if (sig == TARGET_SIGNAL_UNKNOWN)
>     /* I think the code which prints this will always print it along with
>        the string, so no need to be verbose.  */
>     return "?";
>   if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST))
>     return signals[sig].name;
>   else
>     return signals[TARGET_SIGNAL_UNKNOWN].name;
> }


Thanks.  I've committed the attached.

	Andrew




[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 1091 bytes --]

2002-01-13  Andrew Cagney  <ac131313@redhat.com>

	From Petr Ledvina <ledvinap@kae.zcu.cz>:
	* signals.c (target_signal_to_name): Verify that SIG is within the
	bounds of the signals array.

Index: signals.c
===================================================================
RCS file: /cvs/src/src/gdb/signals.c,v
retrieving revision 1.1
diff -p -r1.1 signals.c
*** signals.c	2001/07/19 18:09:11	1.1
--- signals.c	2002/01/13 21:04:30
*************** target_signal_to_name (enum target_signa
*** 214,220 ****
      /* I think the code which prints this will always print it along with
         the string, so no need to be verbose.  */
      return "?";
!   return signals[sig].name;
  }
  
  /* Given a name, return its signal.  */
--- 214,223 ----
      /* I think the code which prints this will always print it along with
         the string, so no need to be verbose.  */
      return "?";
!   else if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST))
!     return signals[sig].name;
!   else
!     return signals[sig].name;
  }
  
  /* Given a name, return its signal.  */

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: bug in gdb/target.c:target_signal_to_name
  2002-01-13 13:10 ` bug in gdb/target.c:target_signal_to_name Andrew Cagney
@ 2002-01-13 13:13   ` Daniel Jacobowitz
  2002-01-13 13:55     ` Andrew Cagney
  0 siblings, 1 reply; 3+ messages in thread
From: Daniel Jacobowitz @ 2002-01-13 13:13 UTC (permalink / raw)
  To: Andrew Cagney; +Cc: Petr Ledvina, gdb-patches

On Sun, Jan 13, 2002 at 04:10:05PM -0500, Andrew Cagney wrote:
> --- 214,223 ----
>       /* I think the code which prints this will always print it along with
>          the string, so no need to be verbose.  */
>       return "?";
> !   else if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST))
> !     return signals[sig].name;
> !   else
> !     return signals[sig].name;
>   }
>   
>   /* Given a name, return its signal.  */

That's probably not what you meant to commit, since both cases are the
same.

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: bug in gdb/target.c:target_signal_to_name
  2002-01-13 13:13   ` Daniel Jacobowitz
@ 2002-01-13 13:55     ` Andrew Cagney
  0 siblings, 0 replies; 3+ messages in thread
From: Andrew Cagney @ 2002-01-13 13:55 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: Petr Ledvina, gdb-patches

[-- Attachment #1: Type: text/plain, Size: 622 bytes --]

> On Sun, Jan 13, 2002 at 04:10:05PM -0500, Andrew Cagney wrote:
> 
>> --- 214,223 ----
>> /* I think the code which prints this will always print it along with
>> the string, so no need to be verbose.  */
>> return "?";
>> !   else if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST))
>> !     return signals[sig].name;
>> !   else
>> !     return signals[sig].name;
>> }
>> > /* Given a name, return its signal.  */
> 
> 
> That's probably not what you meant to commit, since both cases are the
> same.


Er, no. Lets try the attached.  Turns out that 
signals[TARGET_SIGNAL_UNKNOWN].name is NULL.

Andrew



[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 1352 bytes --]

2002-01-13  Andrew Cagney  <ac131313@redhat.com>

	* signals.c (target_signal_to_name): Rewrite.  Only use
	signals[].name when in bounds and non-NULL.
	
Index: signals.c
===================================================================
RCS file: /cvs/src/src/gdb/signals.c,v
retrieving revision 1.2
diff -p -r1.2 signals.c
*** signals.c	2002/01/13 21:11:38	1.2
--- signals.c	2002/01/13 21:51:26
*************** target_signal_to_string (enum target_sig
*** 210,223 ****
  char *
  target_signal_to_name (enum target_signal sig)
  {
!   if (sig == TARGET_SIGNAL_UNKNOWN)
!     /* I think the code which prints this will always print it along with
!        the string, so no need to be verbose.  */
!     return "?";
!   else if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST))
      return signals[sig].name;
    else
!     return signals[sig].name;
  }
  
  /* Given a name, return its signal.  */
--- 210,222 ----
  char *
  target_signal_to_name (enum target_signal sig)
  {
!   if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST)
!       && signals[sig].name != NULL)
      return signals[sig].name;
    else
!     /* I think the code which prints this will always print it along
!        with the string, so no need to be verbose (very old comment).  */
!     return "?";
  }
  
  /* Given a name, return its signal.  */

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-01-13 21:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <Pine.OSF.4.33.0111301833160.4557-100000@eryx1.zcu.cz>
2002-01-13 13:10 ` bug in gdb/target.c:target_signal_to_name Andrew Cagney
2002-01-13 13:13   ` Daniel Jacobowitz
2002-01-13 13:55     ` Andrew Cagney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox