Commit c75795fa by Tom de Vries Committed by Tom de Vries

[libbacktrace] Fix strrchr segfault

Currently, when running a libbacktrace testcase t with .gnu_debuglink to
t.debug, and t.debug having a .gnu_debugaltlink to t.alt.debug, a segfault
is triggered when calling strrchr with a NULL string from
elf_find_debugfile_by_debuglink.  The NULL string originates from the elf_add
called for the .gnu_debugaltlink, which uses NULL as filename argument.

Fix this by using "" as filename argument instead.

2019-01-25  Tom de Vries  <tdevries@suse.de>

	* elf.c (elf_add): When handling .gnu_debugaltlink, call elf_add with
	filename == "".
	* Makefile.am (TESTS): Add btest_dwz_gnudebuglink.
	* Makefile.in: Regenerate.

From-SVN: r268269
parent 37ab491d
2019-01-25 Tom de Vries <tdevries@suse.de> 2019-01-25 Tom de Vries <tdevries@suse.de>
* elf.c (elf_add): When handling .gnu_debugaltlink, call elf_add with
filename == "".
* Makefile.am (TESTS): Add btest_dwz_gnudebuglink.
* Makefile.in: Regenerate.
2019-01-25 Tom de Vries <tdevries@suse.de>
* Makefile.am: Rewrite dtest rule into "%_gnudebuglink" pattern rule. * Makefile.am: Rewrite dtest rule into "%_gnudebuglink" pattern rule.
(TESTS): Rename dtest to btest_gnudebuglink. (TESTS): Rename dtest to btest_gnudebuglink.
* Makefile.in: Regenerate. * Makefile.in: Regenerate.
......
...@@ -190,6 +190,12 @@ if HAVE_DWZ ...@@ -190,6 +190,12 @@ if HAVE_DWZ
TESTS += btest_dwz TESTS += btest_dwz
if HAVE_OBJCOPY_DEBUGLINK
TESTS += btest_dwz_gnudebuglink
endif HAVE_OBJCOPY_DEBUGLINK
endif HAVE_DWZ endif HAVE_DWZ
stest_SOURCES = stest.c stest_SOURCES = stest.c
......
...@@ -127,11 +127,12 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) ...@@ -127,11 +127,12 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3)
@NATIVE_TRUE@ ztest ztest_alloc edtest edtest_alloc @NATIVE_TRUE@ ztest ztest_alloc edtest edtest_alloc
@NATIVE_TRUE@am__append_2 = allocfail.sh @NATIVE_TRUE@am__append_2 = allocfail.sh
@HAVE_DWZ_TRUE@@NATIVE_TRUE@am__append_3 = btest_dwz @HAVE_DWZ_TRUE@@NATIVE_TRUE@am__append_3 = btest_dwz
@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_4 = -lz @HAVE_DWZ_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_4 = btest_dwz_gnudebuglink
@HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_5 = -lz @HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_5 = -lz
@HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__append_6 = ttest ttest_alloc @HAVE_ZLIB_TRUE@@NATIVE_TRUE@am__append_6 = -lz
@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_7 = btest_gnudebuglink @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__append_7 = ttest ttest_alloc
@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__append_8 = ctestg ctesta \ @HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_8 = btest_gnudebuglink
@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__append_9 = ctestg ctesta \
@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg_alloc \ @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctestg_alloc \
@HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta_alloc @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@ ctesta_alloc
subdir = . subdir = .
...@@ -789,7 +790,7 @@ libbacktrace_la_LIBADD = \ ...@@ -789,7 +790,7 @@ libbacktrace_la_LIBADD = \
libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD) libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD)
TESTS = $(check_PROGRAMS) $(am__append_2) $(am__append_3) \ TESTS = $(check_PROGRAMS) $(am__append_2) $(am__append_3) \
$(am__append_7) $(am__append_4) $(am__append_8)
@NATIVE_TRUE@check_LTLIBRARIES = libbacktrace_alloc.la \ @NATIVE_TRUE@check_LTLIBRARIES = libbacktrace_alloc.la \
@NATIVE_TRUE@ libbacktrace_noformat.la \ @NATIVE_TRUE@ libbacktrace_noformat.la \
@NATIVE_TRUE@ libbacktrace_instrumented_alloc.la @NATIVE_TRUE@ libbacktrace_instrumented_alloc.la
...@@ -834,9 +835,9 @@ TESTS = $(check_PROGRAMS) $(am__append_2) $(am__append_3) \ ...@@ -834,9 +835,9 @@ TESTS = $(check_PROGRAMS) $(am__append_2) $(am__append_3) \
@NATIVE_TRUE@stest_alloc_LDADD = libbacktrace_alloc.la @NATIVE_TRUE@stest_alloc_LDADD = libbacktrace_alloc.la
@NATIVE_TRUE@ztest_SOURCES = ztest.c testlib.c @NATIVE_TRUE@ztest_SOURCES = ztest.c testlib.c
@NATIVE_TRUE@ztest_CFLAGS = -DSRCDIR=\"$(srcdir)\" @NATIVE_TRUE@ztest_CFLAGS = -DSRCDIR=\"$(srcdir)\"
@NATIVE_TRUE@ztest_LDADD = libbacktrace.la $(am__append_4) \ @NATIVE_TRUE@ztest_LDADD = libbacktrace.la $(am__append_5) \
@NATIVE_TRUE@ $(CLOCK_GETTIME_LINK) @NATIVE_TRUE@ $(CLOCK_GETTIME_LINK)
@NATIVE_TRUE@ztest_alloc_LDADD = libbacktrace_alloc.la $(am__append_5) \ @NATIVE_TRUE@ztest_alloc_LDADD = libbacktrace_alloc.la $(am__append_6) \
@NATIVE_TRUE@ $(CLOCK_GETTIME_LINK) @NATIVE_TRUE@ $(CLOCK_GETTIME_LINK)
@NATIVE_TRUE@ztest_alloc_SOURCES = $(ztest_SOURCES) @NATIVE_TRUE@ztest_alloc_SOURCES = $(ztest_SOURCES)
@NATIVE_TRUE@ztest_alloc_CFLAGS = $(ztest_CFLAGS) @NATIVE_TRUE@ztest_alloc_CFLAGS = $(ztest_CFLAGS)
...@@ -1585,6 +1586,13 @@ btest_dwz.log: btest_dwz ...@@ -1585,6 +1586,13 @@ btest_dwz.log: btest_dwz
--log-file $$b.log --trs-file $$b.trs \ --log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT) "$$tst" $(AM_TESTS_FD_REDIRECT)
btest_dwz_gnudebuglink.log: btest_dwz_gnudebuglink
@p='btest_dwz_gnudebuglink'; \
b='btest_dwz_gnudebuglink'; \
$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
btest_gnudebuglink.log: btest_gnudebuglink btest_gnudebuglink.log: btest_gnudebuglink
@p='btest_gnudebuglink'; \ @p='btest_gnudebuglink'; \
b='btest_gnudebuglink'; \ b='btest_gnudebuglink'; \
......
...@@ -3080,7 +3080,7 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor, ...@@ -3080,7 +3080,7 @@ elf_add (struct backtrace_state *state, const char *filename, int descriptor,
if (debugaltlink_view_valid) if (debugaltlink_view_valid)
backtrace_release_view (state, &debugaltlink_view, error_callback, backtrace_release_view (state, &debugaltlink_view, error_callback,
data); data);
ret = elf_add (state, NULL, d, base_address, error_callback, data, ret = elf_add (state, "", d, base_address, error_callback, data,
fileline_fn, found_sym, found_dwarf, NULL, 0, 1, NULL, fileline_fn, found_sym, found_dwarf, NULL, 0, 1, NULL,
0); 0);
if (ret < 0) if (ret < 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment