diff options
author | Joel Brobecker <brobecker@adacore.com> | 2018-05-10 10:23:10 -0500 |
---|---|---|
committer | Joel Brobecker <brobecker@adacore.com> | 2018-05-10 11:23:10 -0400 |
commit | 906994d9d50eb40dc89a5bf0830e15ed10938641 (patch) | |
tree | ccaba6d35eca41e6398fe3e4f72ffa9527533c79 | |
parent | 637b19704cf8325875de8df4f8b000197d261e3b (diff) | |
download | gdb-906994d9d50eb40dc89a5bf0830e15ed10938641.zip gdb-906994d9d50eb40dc89a5bf0830e15ed10938641.tar.gz gdb-906994d9d50eb40dc89a5bf0830e15ed10938641.tar.bz2 |
[gdbserver/win32] fatal "glob could not process pattern '(null)'" error
Trying to start GDBserver on Windows currently yields the following
error...
$ gdbserver.exe --once :4444 simple_main.exe
glob could not process pattern '(null)'.
Exiting
... after which GDB terminates with a nonzero status.
This is because create_process in win32-low.c calls gdb_tilde_expand
with the result of a call to get_inferior_cwd without verifying that
the returned directory is not NULL:
| static BOOL
| create_process (const char *program, char *args,
| DWORD flags, PROCESS_INFORMATION *pi)
| {
| const char *inferior_cwd = get_inferior_cwd ();
| std::string expanded_infcwd = gdb_tilde_expand (inferior_cwd);
This patch avoids this by only calling gdb_tilde_expand when
INFERIOR_CWD is not NULL, which is similar to what is done on
GNU/Linux for instance.
gdb/gdbserver/ChangeLog:
PR server/23158:
* win32-low.c (create_process): Only call gdb_tilde_expand if
inferior_cwd is not NULL.
-rw-r--r-- | gdb/gdbserver/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/gdbserver/win32-low.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 9cd72a8..30c7eff 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,9 @@ +2018-05-10 Joel Brobecker <brobecker@adacore.com> + + PR server/23158: + * win32-low.c (create_process): Only call gdb_tilde_expand if + inferior_cwd is not NULL. + 2018-05-08 Andrew Burgess <andrew.burgess@embecosm.com> * i387-fp.c (i387_cache_to_xsave): Only write x87 control diff --git a/gdb/gdbserver/win32-low.c b/gdb/gdbserver/win32-low.c index 9f0c4e4..db5dd49 100644 --- a/gdb/gdbserver/win32-low.c +++ b/gdb/gdbserver/win32-low.c @@ -556,7 +556,6 @@ create_process (const char *program, char *args, DWORD flags, PROCESS_INFORMATION *pi) { const char *inferior_cwd = get_inferior_cwd (); - std::string expanded_infcwd = gdb_tilde_expand (inferior_cwd); BOOL ret; #ifdef _WIN32_WCE @@ -576,6 +575,7 @@ create_process (const char *program, char *args, if (inferior_cwd != NULL) { + std::string expanded_infcwd = gdb_tilde_expand (inferior_cwd); std::replace (expanded_infcwd.begin (), expanded_infcwd.end (), '/', '\\'); wcwd = alloca ((expanded_infcwd.size () + 1) * sizeof (wchar_t)); @@ -607,7 +607,10 @@ Could not convert the expanded inferior cwd to wide-char.")); TRUE, /* inherit handles */ flags, /* start flags */ NULL, /* environment */ - expanded_infcwd.c_str (), /* current directory */ + /* current directory */ + (inferior_cwd == NULL + ? NULL + : gdb_tilde_expand (inferior_cwd).c_str()), &si, /* start info */ pi); /* proc info */ #endif |