[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.
This commit is contained in:
Joel Brobecker 2018-05-10 10:23:10 -05:00
parent 637b19704c
commit 906994d9d5
2 changed files with 11 additions and 2 deletions

View File

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

View File

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