From 9dd3d66b79a2907726f407039234ad8677e9df16 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Fri, 7 Feb 2025 16:17:52 +0100 Subject: [PATCH] [gdb/corefiles] Fix segfault in core_target_open On x86_64-freebsd, with test-case gdb.arch/i386-biarch-core.exp I run into a segfault here in corelow.c:core_target_open: ... { gdb::unique_xmalloc_ptr failing_command = make_unique_xstrdup (bfd_core_file_failing_command (current_program_space->core_bfd ())); if (failing_command != nullptr) gdb_printf (_("Core was generated by `%s'.\n"), failing_command.get ()); } ... where bfd_core_file_failing_command returns nullptr, so the segfault happens somewhere during "strdup (nullptr)". There doesn't seem to be a need to make a copy of the string, so fix this by dropping the make_unique_xstrdup. Tested on x86_64-linux. Tested the test-case on x86_64-freebsd. Approved-By: Tom Tromey PR corefiles/32634 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32634 --- gdb/corelow.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gdb/corelow.c b/gdb/corelow.c index ee57a9c4865..59c16677109 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -1188,11 +1188,11 @@ core_target_open (const char *arg, int from_tty) } else { - gdb::unique_xmalloc_ptr failing_command = make_unique_xstrdup - (bfd_core_file_failing_command (current_program_space->core_bfd ())); + const char *failing_command + = bfd_core_file_failing_command (current_program_space->core_bfd ()); if (failing_command != nullptr) gdb_printf (_("Core was generated by `%s'.\n"), - failing_command.get ()); + failing_command); } /* Clearing any previous state of convenience variables. */ -- 2.47.3