From d149dd1dab5b2493780bf3abdcf3f80318271415 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 1 Jun 2010 12:47:33 +0000 Subject: [PATCH] * server.c (handle_query) : Do two passes over the qSupported string to avoid nesting strtok. --- gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/server.c | 48 +++++++++++++++++++++++++++++------------ 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index b7d0c0cfc3..6d77af632f 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2010-06-01 Pedro Alves + + * server.c (handle_query) : Do two passes over the + qSupported string to avoid nesting strtok. + 2010-05-28 Jan Kratochvil * Makefile.in (SFILES): Add $(srcdir)/proc-service.list. diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 75b9d88677..25845a73c5 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -1346,20 +1346,40 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p) feature will follow a ':', and latter features will follow ';'. */ if (*p == ':') - for (p = strtok (p + 1, ";"); - p != NULL; - p = strtok (NULL, ";")) - { - if (strcmp (p, "multiprocess+") == 0) - { - /* GDB supports and wants multi-process support if - possible. */ - if (target_supports_multi_process ()) - multi_process = 1; - } - else - target_process_qsupported (p); - } + { + char **qsupported = NULL; + int count = 0; + int i; + + /* Two passes, to avoid nested strtok calls in + target_process_qsupported. */ + for (p = strtok (p + 1, ";"); + p != NULL; + p = strtok (NULL, ";")) + { + count++; + qsupported = xrealloc (qsupported, count * sizeof (char *)); + qsupported[count - 1] = xstrdup (p); + } + + for (i = 0; i < count; i++) + { + p = qsupported[i]; + if (strcmp (p, "multiprocess+") == 0) + { + /* GDB supports and wants multi-process support if + possible. */ + if (target_supports_multi_process ()) + multi_process = 1; + } + else + target_process_qsupported (p); + + free (p); + } + + free (qsupported); + } sprintf (own_buf, "PacketSize=%x;QPassSignals+", PBUFSIZ - 1); -- 2.34.1