diff options
author | Tom Tromey <tromey@adacore.com> | 2023-12-15 07:56:45 -0700 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2024-01-09 07:07:41 -0700 |
commit | 862180a2d10963494356ec089a16b808bab736bd (patch) | |
tree | 75a90c6a724aae0e9b52ca47d130714c0cdd07e0 /gdbserver | |
parent | bdb4b8036fd60438ac614d8a8326a17fa5f4ebe7 (diff) | |
download | fsf-binutils-gdb-862180a2d10963494356ec089a16b808bab736bd.zip fsf-binutils-gdb-862180a2d10963494356ec089a16b808bab736bd.tar.gz fsf-binutils-gdb-862180a2d10963494356ec089a16b808bab736bd.tar.bz2 |
Fix two bugs in gdbserver thread name handling
Simon pointed out that my earlier patch to gdbserver's thread name
code:
commit 07b3255c3bae7126a0d679f957788560351eb236
Author: Tom Tromey <tom@tromey.com>
Date: Thu Jul 13 17:28:48 2023 -0600
Filter invalid encodings from Linux thread names
... introduced a regression. This bug was that the iconv output was
not \0-terminated.
Looking at it, I found another bug as well -- replace_non_ascii would
not \0-terminate, and also would return the wrong pointer
This patch fixes both of them.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31153
Diffstat (limited to 'gdbserver')
-rw-r--r-- | gdbserver/linux-low.cc | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc index 4aa011c..8cbc783 100644 --- a/gdbserver/linux-low.cc +++ b/gdbserver/linux-low.cc @@ -7013,11 +7013,13 @@ current_lwp_ptid (void) } /* A helper function that copies NAME to DEST, replacing non-printable - characters with '?'. Returns DEST as a convenience. */ + characters with '?'. Returns the original DEST as a + convenience. */ static const char * replace_non_ascii (char *dest, const char *name) { + const char *result = dest; while (*name != '\0') { if (!ISPRINT (*name)) @@ -7026,7 +7028,8 @@ replace_non_ascii (char *dest, const char *name) *dest++ = *name; ++name; } - return dest; + *dest = '\0'; + return result; } const char * @@ -7064,8 +7067,8 @@ linux_process_target::thread_name (ptid_t thread) else if ((errno == EILSEQ || errno == EINVAL) && outbuf < &dest[sizeof (dest) - 2]) *outbuf++ = '?'; - *outbuf = '\0'; } + *outbuf = '\0'; iconv_close (handle); return *dest == '\0' ? nullptr : dest; |