Fix PR remote/15974

In remote-notif.c:handle_notification, we have a loop,

  for (i = 0; i < ARRAY_SIZE (notifs); i++)
    {
      nc = notifs[i];
      if (strncmp (buf, nc->name, strlen (nc->name)) == 0
	  && buf[strlen (nc->name)] == ':')
	break;
    }

  /* We ignore notifications we don't recognize, for compatibility
     with newer stubs.  */
  if (nc == NULL)
    return;

If the notification is not in the list 'notifs', the last entry is
used, which is wrong.  It should be NULL.  This patch fixes it.

gdb:

2013-12-02  Pedro Alves  <palves@redhat.com>

	PR remote/15974
	* remote-notif.c (handle_notification): Return early if no
	notification is found.
This commit is contained in:
Yao Qi 2013-08-15 09:09:08 +08:00
parent f9b0da3d58
commit 62972e0b66
2 changed files with 15 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2013-12-02 Pedro Alves <palves@redhat.com>
PR remote/15974
* remote-notif.c (handle_notification): Return early if no
notification is found.
2013-12-02 Joel Brobecker <brobecker@adacore.com>
* common/filestuff.c (fdwalk): Add "defined(RLIMIT_NOFILE)"

View File

@ -127,22 +127,25 @@ remote_async_get_pending_events_handler (gdb_client_data data)
void
handle_notification (struct remote_notif_state *state, char *buf)
{
struct notif_client *nc = NULL;
int i;
struct notif_client *nc;
size_t i;
for (i = 0; i < ARRAY_SIZE (notifs); i++)
{
nc = notifs[i];
if (strncmp (buf, nc->name, strlen (nc->name)) == 0
&& buf[strlen (nc->name)] == ':')
const char *name = notifs[i]->name;
if (strncmp (buf, name, strlen (name)) == 0
&& buf[strlen (name)] == ':')
break;
}
/* We ignore notifications we don't recognize, for compatibility
with newer stubs. */
if (nc == NULL)
if (i == ARRAY_SIZE (notifs))
return;
nc = notifs[i];
if (state->pending_event[nc->id] != NULL)
{
/* We've already parsed the in-flight reply, but the stub for some