mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
gdb: check result of gdb_fopen_cloexec in dump_binary_file
Bug 27773 shows that passing a filename in a non-existent directory to the "dump binary" command leads to a gdb crash. This is because the gdb_fopen_cloexec in dump_binary_file fails (returns nullptr) and the return value is not checked. Fix that by erroring out if gdb_fopen_cloexec fails. gdb/ChangeLog: PR gdb/27773 * cli/cli-dump.c (dump_binary_file): Check result of gdb_fopen_cloexec. gdb/testsuite/ChangeLog: PR gdb/27773 * gdb.base/dump.exp: Test dump to non-existent dir. Change-Id: Iea89a3bf9e6b9dcc31142faa5ae17bc855759328
This commit is contained in:
parent
21f9178575
commit
bea3329b76
@ -1,3 +1,9 @@
|
||||
2021-04-26 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
PR gdb/27773
|
||||
* cli/cli-dump.c (dump_binary_file): Check result of
|
||||
gdb_fopen_cloexec.
|
||||
|
||||
2021-04-25 Sergei Trofimovich <siarheit@google.com>
|
||||
|
||||
* sparc-linux-nat.c (sparc_linux_nat_target): fix sparc build
|
||||
|
@ -135,6 +135,9 @@ dump_binary_file (const char *filename, const char *mode,
|
||||
int status;
|
||||
|
||||
gdb_file_up file = gdb_fopen_cloexec (filename, mode);
|
||||
if (file == nullptr)
|
||||
perror_with_name (filename);
|
||||
|
||||
status = fwrite (buf, len, 1, file.get ());
|
||||
if (status != 1)
|
||||
perror_with_name (filename);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2021-04-26 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
PR gdb/27773
|
||||
* gdb.base/dump.exp: Test dump to non-existent dir.
|
||||
|
||||
2021-04-26 Luis Machado <luis.machado@linaro.org>
|
||||
|
||||
* gdb.arch/aarch64-dbreg-contents.c (set_watchpoint): Fix arch level
|
||||
|
@ -24,6 +24,8 @@ set options {debug}
|
||||
set is64bitonly "no"
|
||||
set endian "auto"
|
||||
|
||||
set formats {binary ihex srec tekhex verilog}
|
||||
|
||||
if [istarget "alpha*-*-*"] then {
|
||||
# SREC etc cannot handle 64-bit addresses. Force the test
|
||||
# program into the low 31 bits of the address space.
|
||||
@ -467,6 +469,14 @@ if ![string compare $is64bitonly "no"] then {
|
||||
}
|
||||
|
||||
|
||||
# Test writing a file of each format to a directory that does not exist.
|
||||
|
||||
foreach_with_prefix format $formats {
|
||||
gdb_test "dump $format memory /tmp/non/existent/directory/file $array_start $array_end" \
|
||||
"/tmp/non/existent/directory/file: No such file or directory." \
|
||||
"dump to non-existent directory"
|
||||
}
|
||||
|
||||
# Now start a fresh gdb session, and reload the saved value files.
|
||||
|
||||
gdb_exit
|
||||
|
Loading…
Reference in New Issue
Block a user