external/breakpad: Silence some UBSan warnings
...which I happened to run into when the breakpad code kicked in due to some crash happening, > src/client/linux/minidump_writer/minidump_writer.cc:721:12: runtime error: null pointer passed as argument 2, which is declared to never be null /usr/include/string.h:44:28: note: nonnull attribute specified here > src/client/linux/minidump_writer/minidump_writer.cc:763:14: runtime error: applying non-zero offset to non-null pointer 0x000000200000 produced null pointer > src/client/linux/minidump_writer/minidump_writer.cc:772:64: runtime error: applying non-zero offset 3200848 to null pointer (Unlike the changes in the existing external/breakpad/ubsan.patch, which is only applied when doing sanitizer builds, these changes should be non-controversial and OK to apply always, so they go into a different patch file.) Change-Id: Ib1b3f87ba22f96d5fb93b8fcb9951ddc3c353697 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124245 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
This commit is contained in:
parent
092f61bd3b
commit
11ecb45eb9
2 changed files with 30 additions and 0 deletions
|
@ -28,6 +28,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,breakpad,\
|
|||
external/breakpad/breakpad-dump_syms.patch.1 \
|
||||
external/breakpad/breakpad-no-env.patch.1 \
|
||||
external/breakpad/SIGSTKSZ.patch \
|
||||
external/breakpad/sanitizer.patch \
|
||||
))
|
||||
|
||||
$(eval $(call gb_UnpackedTarball_add_files,breakpad,src/tools/windows/dump_syms,\
|
||||
|
|
29
external/breakpad/sanitizer.patch
vendored
Normal file
29
external/breakpad/sanitizer.patch
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
--- src/client/linux/minidump_writer/minidump_writer.cc
|
||||
+++ src/client/linux/minidump_writer/minidump_writer.cc
|
||||
@@ -717,7 +717,7 @@
|
||||
const std::vector<uint64_t> crash_exception_info =
|
||||
dumper_->crash_exception_info();
|
||||
stream->exception_record.number_parameters = crash_exception_info.size();
|
||||
- memcpy(stream->exception_record.exception_information,
|
||||
+ if (!crash_exception_info.empty()) memcpy(stream->exception_record.exception_information,
|
||||
crash_exception_info.data(),
|
||||
sizeof(uint64_t) * crash_exception_info.size());
|
||||
stream->thread_context = crashing_thread_context_;
|
||||
@@ -760,7 +760,7 @@
|
||||
// Adjust base address with the virtual address of the PT_LOAD segment
|
||||
// corresponding to offset 0
|
||||
if (ph.p_type == PT_LOAD && ph.p_offset == 0) {
|
||||
- base -= ph.p_vaddr;
|
||||
+ base = reinterpret_cast<char*>(reinterpret_cast<uintptr_t>(base) - ph.p_vaddr);
|
||||
}
|
||||
if (ph.p_type == PT_DYNAMIC) {
|
||||
dyn_addr = ph.p_vaddr;
|
||||
@@ -769,7 +769,7 @@
|
||||
if (!dyn_addr)
|
||||
return false;
|
||||
|
||||
- ElfW(Dyn)* dynamic = reinterpret_cast<ElfW(Dyn)*>(dyn_addr + base);
|
||||
+ ElfW(Dyn)* dynamic = reinterpret_cast<ElfW(Dyn)*>(dyn_addr + reinterpret_cast<uintptr_t>(base));
|
||||
|
||||
// The dynamic linker makes information available that helps gdb find all
|
||||
// DSOs loaded into the program. If this information is indeed available,
|
Loading…
Reference in a new issue