aboutsummaryrefslogtreecommitdiff
path: root/gdbserver
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2023-12-15 07:56:45 -0700
committerTom Tromey <tromey@adacore.com>2024-01-09 07:07:41 -0700
commit862180a2d10963494356ec089a16b808bab736bd (patch)
tree75a90c6a724aae0e9b52ca47d130714c0cdd07e0 /gdbserver
parentbdb4b8036fd60438ac614d8a8326a17fa5f4ebe7 (diff)
downloadfsf-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.cc9
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;