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:
Simon Marchi 2021-04-26 11:27:07 -04:00
parent 21f9178575
commit bea3329b76
4 changed files with 24 additions and 0 deletions

View file

@ -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);