aboutsummaryrefslogtreecommitdiff
path: root/gdb/source.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2021-05-17 12:55:18 -0600
committerTom Tromey <tromey@adacore.com>2021-05-17 13:01:42 -0600
commitbaea2f9d52d606f6b58a736420017c98351f5b5c (patch)
tree9edfb3734519a9a46900e2436f78fc02522d9699 /gdb/source.c
parent473ab96443eaf08f1a56c116c82410de2022c29b (diff)
downloadgdb-baea2f9d52d606f6b58a736420017c98351f5b5c.zip
gdb-baea2f9d52d606f6b58a736420017c98351f5b5c.tar.gz
gdb-baea2f9d52d606f6b58a736420017c98351f5b5c.tar.bz2
Fix buffer underflow in add_path
Address sanitizer pointed out a buglet in source.c:add_path. In this test, from gdb.base/source-dir.exp: (gdb) set directories :/foo:/bar ... 'p[-1]' will result in a buffer underflow. This patch fixes the bug by introducing a new check. 2021-05-17 Tom Tromey <tromey@adacore.com> * source.c (add_path): Check 'p' before using 'p[-1]'.
Diffstat (limited to 'gdb/source.c')
-rw-r--r--gdb/source.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/gdb/source.c b/gdb/source.c
index 6fc27ae..b6dab6e 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -537,6 +537,7 @@ add_path (const char *dirname, char **which_path, int parse_separators)
/* On MS-DOS and MS-Windows, h:\ is different from h: */
&& !(p == name + 3 && name[1] == ':') /* "d:/" */
#endif
+ && p > name
&& IS_DIR_SEPARATOR (p[-1]))
/* Sigh. "foo/" => "foo" */
--p;