aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Durigan Junior <sergiodj@redhat.com>2014-12-29 14:22:20 -0500
committerSergio Durigan Junior <sergiodj@redhat.com>2014-12-29 14:23:54 -0500
commitfafcc06ab29fe98d2767234dc77062d08ea0d3c7 (patch)
treeb788f21482f9808e1360d7d4e60bb65341fa273c
parentb35b02984b80ff231dd11dc4f3c7bdba6bef95a7 (diff)
downloadgdb-fafcc06ab29fe98d2767234dc77062d08ea0d3c7.zip
gdb-fafcc06ab29fe98d2767234dc77062d08ea0d3c7.tar.gz
gdb-fafcc06ab29fe98d2767234dc77062d08ea0d3c7.tar.bz2
Sanitize input_interrupt output
Hi, This patch is a follow-up of the following discussions: <https://sourceware.org/ml/gdb-patches/2014-12/msg00421.html> <https://gcc.gnu.org/ml/gcc-patches/2014-12/msg01293.html> input_interrupt is currently emiting non-printable characters, which is confusing the dg-extract-results.sh script. This is obviously not a good thing, and, by following Pedro's advices here: <https://gcc.gnu.org/ml/gcc-patches/2014-12/msg01320.html> I adapted the function to print "client connection closed" when it receives a NUL character, or use the "isprint" function to decide how to print the received char. I tested it by running the testcases that were printing the non-printable chars before: gdb.base/gdb-sigterm.exp gdb.threads/non-ldr-exc-1.exp gdb.threads/non-ldr-exc-2.exp gdb.threads/non-ldr-exc-3.exp gdb.threads/non-ldr-exc-4.exp gdb.threads/thread-execl.exp and confirming that they print the right message. I tried a bit to come up with a testcase for this, but failed, and since I did not want to spend too much time on it, I'm sending the patch anyway. Comments are welcome, as usual. gdb/gdbserver/ChangeLog: 2014-12-29 Sergio Durigan Junior <sergiodj@redhat.com> * remote-utils.c: Include ctype.h. (input_interrupt): Explicitly handle the case when the char received is the NUL byte. Improve the printing of non-ASCII characters.
-rw-r--r--gdb/gdbserver/ChangeLog7
-rw-r--r--gdb/gdbserver/remote-utils.c15
2 files changed, 19 insertions, 3 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index a95bce5..9414417 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,10 @@
+2014-12-29 Sergio Durigan Junior <sergiodj@redhat.com>
+
+ * remote-utils.c: Include ctype.h.
+ (input_interrupt): Explicitly handle the case when the char
+ received is the NUL byte. Improve the printing of non-ASCII
+ characters.
+
2014-12-16 Joel Brobecker <brobecker@adacore.com>
* linux-low.c (linux_low_filter_event): Update call to
diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c
index 373fc15..bc54518 100644
--- a/gdb/gdbserver/remote-utils.c
+++ b/gdb/gdbserver/remote-utils.c
@@ -23,6 +23,7 @@
#include "tdesc.h"
#include "dll.h"
#include "rsp-low.h"
+#include <ctype.h>
#if HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif
@@ -741,10 +742,18 @@ input_interrupt (int unused)
cc = read_prim (&c, 1);
- if (cc != 1 || c != '\003' || current_thread == NULL)
+ if (cc == 0)
{
- fprintf (stderr, "input_interrupt, count = %d c = %d ('%c')\n",
- cc, c, c);
+ fprintf (stderr, "client connection closed\n");
+ return;
+ }
+ else if (cc != 1 || c != '\003' || current_thread == NULL)
+ {
+ fprintf (stderr, "input_interrupt, count = %d c = %d ", cc, c);
+ if (isprint (c))
+ fprintf (stderr, "('%c')\n", c);
+ else
+ fprintf (stderr, "('\\x%02x')\n", c & 0xff);
return;
}