diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8a2725368e3..bb7b2de0b58 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-02-27 Lancelot Six + + PR gdb/27393 + * source.c (add_path): Skip empty dirnames. + 2021-02-25 Kevin Buettner * nat/aarch64-sve-linux-ptrace.h: Add comment regarding diff --git a/gdb/source.c b/gdb/source.c index dc30dac6d78..3a8f829759b 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -572,6 +572,8 @@ add_path (const char *dirname, char **which_path, int parse_separators) break; } + if (name[0] == '\0') + goto skip_dup; if (name[0] == '~') new_name_holder.reset (tilde_expand (name)); #ifdef HAVE_DOS_BASED_FILE_SYSTEM diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 625c4ecf493..b92e67c9557 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2021-02-27 Lancelot Six + + PR gdb/27393 + * gdb.base/source-dir.exp: Test that empty dirnames are skipped. + + 2021-02-26 Tom Tromey * lib/gdb.exp (skip_ctf_tests): Use expr on result. diff --git a/gdb/testsuite/gdb.base/source-dir.exp b/gdb/testsuite/gdb.base/source-dir.exp index 988ea59afb5..eff683199be 100644 --- a/gdb/testsuite/gdb.base/source-dir.exp +++ b/gdb/testsuite/gdb.base/source-dir.exp @@ -163,5 +163,46 @@ proc test_truncated_comp_dir {} { "info source after setting directory search list" } +proc test_change_search_directory_with_empty_dirname {} { + gdb_start + + # Add 3 entries to the source directories list: + # - "" + # - "/foo" + # - "/bar" + # Since /foo and /bar probably do not exist, ignore the warnings printed by + # GDB. + if { [ishost *-*-mingw*] } { + gdb_test "set directories ;/foo;/bar" ".*" + } else { + gdb_test "set directories :/foo:/bar" ".*" + } + + # The first entry added ("") should be ignored, only /foo and /bar are + # effectively added. + with_test_prefix "initial_directory_state" { + gdb_test "show directories" \ + [search_dir_list [list \ + "/foo" \ + "/bar" \ + "\\\$cdir" \ + "\\\$cwd"]] + } + + # Arguments can be quoted. Check a empty string has the same effect as + # 'set directory' (i.e. reset to $cdir:$cwd) + gdb_test_no_output "set directories \"\"" + + with_test_prefix "directory_after_reset" { + gdb_test "show directories" \ + [search_dir_list [list \ + "\\\$cdir" \ + "\\\$cwd"]] + } + + gdb_exit +} + test_changing_search_directory +test_change_search_directory_with_empty_dirname test_truncated_comp_dir