[PATCH 3/4] [PR gdbserver/25893]: Use construct_inferior_arguments which handles special chars

Michael Weghorn m.weghorn@posteo.de
Wed Apr 29 11:16:37 GMT 2020


Use the construct_inferior_arguments function instead of
stringify_argv to construct a string from the program
arguments in those places where that one is then passed
to fork_inferior, since construct_inferior_arguments
properly takes care of special characters, while
stringify_argv does not.
Using construct_inferior_arguments seems "natural", since its
documentation also mentions that it "does the
same shell processing as fork_inferior".

This makes gdbserver properly handle program args containing special
characters, e.g. (example from PR25893)

  $ gdbserver localhost:50505 myprogram "hello world"

now properly handles "hello world" as a single arg, not two separate
ones ("hello", "world").

I'm not sure regarding the two remaining uses of function stringify_argv
(in win32_process_target::create_inferior and
nto_process_target::create_inferior) whose result is not passed to
fork_inferior and don't know how the arg processing in the creation
of processes on those targets exactly works, so left them unchanged
for now.

2020-04-29  Michael Weghorn  <m.weghorn@posteo.de>

        PR gdbserver/25893
        * linux-low.cc (linux_process_target::create_inferior),
        lynx-low.cc (lynx_process_target::create_inferior): Use
        construct_inferior_arguments instead of stringify_argv
        to get string representation which properly escapes
        special characters.
---
 gdbserver/linux-low.cc | 2 +-
 gdbserver/lynx-low.cc  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index 3cd8d5594d..3f3ffc6c43 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -984,7 +984,7 @@ linux_process_target::create_inferior (const char *program,
   {
     maybe_disable_address_space_randomization restore_personality
       (cs.disable_randomization);
-    std::string str_program_args = stringify_argv (program_args);
+    std::string str_program_args = construct_inferior_arguments (program_args.size(), program_args.data());
 
     pid = fork_inferior (program,
 			 str_program_args.c_str (),
diff --git a/gdbserver/lynx-low.cc b/gdbserver/lynx-low.cc
index 9aa140c129..61f692f0c0 100644
--- a/gdbserver/lynx-low.cc
+++ b/gdbserver/lynx-low.cc
@@ -253,7 +253,7 @@ lynx_process_target::create_inferior (const char *program,
 				      const std::vector<char *> &program_args)
 {
   int pid;
-  std::string str_program_args = stringify_argv (program_args);
+  std::string str_program_args = construct_inferior_arguments (program_args.size(), program_args.data());;
 
   lynx_debug ("create_inferior ()");
 
-- 
2.26.2



More information about the Gdb-patches mailing list