[gdbserver/win32] fatal "glob could not process pattern '(null)'" error
authorJoel Brobecker <brobecker@adacore.com>
Thu, 10 May 2018 15:23:10 +0000 (10:23 -0500)
committerJoel Brobecker <brobecker@adacore.com>
Thu, 10 May 2018 15:23:10 +0000 (11:23 -0400)
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.

gdb/gdbserver/ChangeLog
gdb/gdbserver/win32-low.c

index 9cd72a89f719226569b63a4d1081f94de1faae31..30c7eff72c37144ffe66695c4c3b0ebf0b4b5ec1 100644 (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
index 9f0c4e46c1ffcf9d9d5e444d538435a046b1e59c..db5dd49eedf1383a02d2f2acc9a27f2f3073761f 100644 (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