aboutsummaryrefslogtreecommitdiff
path: root/gdb/p-lang.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2025-08-04 10:39:02 -0600
committerTom Tromey <tromey@adacore.com>2025-09-09 11:59:04 -0600
commit3719472095d25d799ed269f36034006c79460090 (patch)
treef910dab837d83fa21aed9c596d7e6d076c9b0395 /gdb/p-lang.c
parent15e11aac9cccfe38e0afaa07af55bb835e39789c (diff)
downloadgdb-3719472095d25d799ed269f36034006c79460090.zip
gdb-3719472095d25d799ed269f36034006c79460090.tar.gz
gdb-3719472095d25d799ed269f36034006c79460090.tar.bz2
Use gnulib c-ctype module in gdb
PR ada/33217 points out that gdb incorrectly calls the <ctype.h> functions. In particular, gdb feels free to pass a 'char' like: char *str = ...; ... isdigit (*str) This is incorrect as isdigit only accepts EOF and values that can be represented as 'unsigned char' -- that is, a cast is needed here to avoid undefined behavior when 'char' is signed and a character in the string might be sign-extended. (As an aside, I think this API seems obviously bad, but unfortunately this is what the standard says, and some systems check this.) Rather than adding casts everywhere, this changes all the code in gdb that uses any <ctype.h> API to instead call the corresponding c-ctype function. Now, c-ctype has some limitations compared to <ctype.h>. It works as if the C locale is in effect, so in theory some non-ASCII characters may be misclassified. This would only affect a subset of character sets, though, and in most places I think ASCII is sufficient -- for example the many places in gdb that check for whitespace. Furthermore, in practice most users are using UTF-8-based locales, where these functions aren't really informative for non-ASCII characters anyway; see the existing workarounds in gdb/c-support.h. Note that safe-ctype.h cannot be used because it causes conflicts with readline.h. And, we canot poison the <ctype.h> identifiers as this provokes errors from some libstdc++ headers. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33217 Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diffstat (limited to 'gdb/p-lang.c')
-rw-r--r--gdb/p-lang.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index 3ded152..1dc1a34 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -30,7 +30,6 @@
#include "p-lang.h"
#include "valprint.h"
#include "value.h"
-#include <ctype.h>
#include "c-lang.h"
#include "gdbarch.h"
#include "cli/cli-style.h"