Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Lancelot SIX via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Cc: Lancelot SIX <lsix@lancelotsix.com>
Subject: [PATCH] [PR gdb/27393] set directories: handle empty dirs.
Date: Thu, 25 Feb 2021 00:50:43 +0000	[thread overview]
Message-ID: <20210225005043.30663-1-lsix@lancelotsix.com> (raw)

As reported in gdb/27393, the 'directory' and 'set directories' commands
fail when parsing an empty dir name:

    (gdb) set directories ""
    /home/lsix/dev/gnu/binutils-gdb/gdbsupport/pathstuff.cc:132: internal-error: gdb::unique_xmalloc_ptr<char> gdb_abspath(const char*): Assertion `path != NULL && path[0] != '\0'' failed.

or

    (gdb) dir :
    /home/lsix/dev/gnu/binutils-gdb/gdbsupport/pathstuff.cc:132: internal-error: gdb::unique_xmalloc_ptr<char> gdb_abspath(const char*): Assertion `path != NULL && path[0] != '\0'' failed.

This patch fixes this issue by ignoring any attempt to add an empty
name to the source directories list.  'set dir ""' will reset the
directories list the same way 'set dir' would do it.

Tested on x86_64.

gdb/ChangeLog:

	PR gdb/27393
	* source.c (add_path): Skip empty dirnames.

gdb/testsuite/ChangeLog:

	PR gdb/27393
	* gdb.base/source-dir.exp: Test that empty dirnames are skipped.
---
 gdb/source.c                          |  2 ++
 gdb/testsuite/gdb.base/source-dir.exp | 41 +++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

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/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
-- 
2.30.0


             reply	other threads:[~2021-02-25  0:51 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-25  0:50 Lancelot SIX via Gdb-patches [this message]
2021-02-25 14:26 ` Tom Tromey
2021-02-27 18:49   ` Lancelot SIX via Gdb-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210225005043.30663-1-lsix@lancelotsix.com \
    --to=gdb-patches@sourceware.org \
    --cc=lsix@lancelotsix.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox