binutils-gdb/gdb/python
Andrew Burgess 512ca2fca4 gdb: split up construct_inferior_arguments
The function construct_inferior_arguments (gdbsupport/common-inferior.cc)
currently escapes all special shell characters.  After this commit
there will be two "levels" of quoting:

  1. The current "full" quoting, where all posix shell special
  characters are quoted, and

  2. a new "reduced" quoting, where only the characters that GDB sees
  as special (quotes and whitespace) are quoted.

After this, almost all construct_inferior_arguments calls will use the
"full" quoting, which is the current quoting.  The "reduced" quoting
will be used in this commit to restore the behaviour that was lost in
the previous commit (more details below).

In the future, the reduced quoting will be useful for some additional
inferior argument that I have planned.  I already posted my full
inferior argument work here:

  https://inbox.sourceware.org/gdb-patches/cover.1730731085.git.aburgess@redhat.com

But that series is pretty long, and wasn't getting reviewed, so I'm
posted the series in parts now.

Before the previous commit, GDB behaved like this:

  $ gdb -eiex 'set startup-with-shell off' --args /tmp/exec '$FOO'
  (gdb) show args
  Argument list to give program being debugged when it is started is "$FOO".

Notice that with 'startup-with-shell' off, the argument was left as
just '$FOO'.  But after the previous commit, this changed to:

  $ gdb -eiex 'set startup-with-shell off' --args /tmp/exec '$FOO'
  (gdb) show args
  Argument list to give program being debugged when it is started is "\$FOO".

Now the '$' is escaped with a backslash.  This commit restores the
original behaviour, as this is (currently) the only way to unquoted
shell special characters into arguments from the GDB command line.
The series that I listed above includes a new command line option for
GDB which provides a better approach for controlling the quoting of
special shell characters, but that work requires these patches to be
merged first.

I've split out the core of construct_inferior_arguments into the new
function escape_characters, which takes a set of characters to escape.
Then the two functions escape_shell_characters and
escape_gdb_characters call escape_characters with the appropriate
character sets.

Finally, construct_inferior_arguments, now takes a boolean which
indicates if we should perform full shell escaping, or just perform
the reduced escaping.

I've updated all uses of construct_inferior_arguments to pass a
suitable value to indicate what escaping to perform (mostly just
'true', but one case in main.c is different), also I've updated
inferior::set_args to take the same boolean flag, and pass it through
to construct_inferior_arguments.

Tested-By: Guinevere Larsen <guinevere@redhat.com>
2025-03-18 13:03:07 +00:00
..
lib/gdb [gdb/python] Fix typos in lib 2025-03-06 23:21:54 +01:00
py-all-events.def Add gdb.events.tui_enabled 2024-11-01 11:06:47 -06:00
py-arch.c gdb/python: add void_type () method to gdb.Architecture object 2025-02-04 13:56:49 +00:00
py-auto-load.c [gdb/contrib] Add two rules in common-misspellings.txt 2024-11-23 12:20:34 +01:00
py-block.c gdb/python: add subblocks property to gdb.Block 2025-02-04 13:56:49 +00:00
py-bpevent.c
py-breakpoint.c Bploc should try to return full path 2025-03-03 18:53:12 +01:00
py-cmd.c [gdb/python] Eliminate GDB_PY_SET_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-color.c Add an option with a color type. 2025-01-12 13:30:43 -07:00
py-color.h Fix check-include-guards.py 2025-03-10 09:18:40 -06:00
py-connection.c Use gdb map in py-connection.c 2025-03-11 08:40:06 -06:00
py-continueevent.c
py-dap.c
py-disasm.c gdb/python: remove unused argument from builtin_disassemble 2025-03-15 17:12:12 +00:00
py-event-types.def Add gdb.events.tui_enabled 2024-11-01 11:06:47 -06:00
py-event.c Automatically add types to Python modules 2024-09-23 13:44:59 -06:00
py-event.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
py-events.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
py-evtregistry.c Automatically add types to Python modules 2024-09-23 13:44:59 -06:00
py-evts.c
py-exitedevent.c
py-finishbreakpoint.c [gdb/python] Eliminate GDB_PY_SET_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-frame.c [gdb/python] Eliminate GDB_PY_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-framefilter.c [gdb/python] Fix typos 2025-03-06 23:21:54 +01:00
py-function.c Call gdbpy_fix_doc_string_indentation for function help 2024-11-11 07:44:27 -07:00
py-gdb-readline.c [gdb/python] Eliminate GDB_PY_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-inferior.c gdb: split up construct_inferior_arguments 2025-03-18 13:03:07 +00:00
py-infevents.c
py-infthread.c [gdb/python] Eliminate GDB_PY_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-instruction.c Automatically add types to Python modules 2024-09-23 13:44:59 -06:00
py-instruction.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
py-lazy-string.c [gdb/python] Fix typos 2025-03-06 23:21:54 +01:00
py-linetable.c [gdb/python] Eliminate GDB_PY_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-membuf.c Automatically add types to Python modules 2024-09-23 13:44:59 -06:00
py-mi.c Require a command argument in gdb.execute_mi 2024-10-18 11:50:27 -06:00
py-micmd.c gdb/python: missing PyObject_IsTrue error check in micmdpy_set_installed 2024-11-14 19:34:44 +00:00
py-newobjfileevent.c
py-objfile.c [gdb/python] Eliminate GDB_PY_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-param.c Add an option with a color type. 2025-01-12 13:30:43 -07:00
py-prettyprint.c Automatically add types to Python modules 2024-09-23 13:44:59 -06:00
py-progspace.c [gdb/python] Fix typos 2025-03-06 23:21:54 +01:00
py-record-btrace.c btrace: Add support for interrupt events. 2024-09-24 14:22:28 +02:00
py-record-btrace.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
py-record-full.c
py-record-full.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
py-record.c [gdb/python] Eliminate GDB_PY_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-record.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
py-ref.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
py-registers.c Use gdb unordered set and map in Python layer 2025-03-18 05:32:04 -06:00
py-signalevent.c
py-stopevent.c [gdb/python] Eliminate GDB_PY_HANDLE_EXCEPTION 2024-09-24 13:06:32 +02:00
py-stopevent.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
py-symbol.c gdb/python: add domain property to gdb.Symbol 2025-02-04 13:56:49 +00:00
py-symtab.c Automatically add types to Python modules 2024-09-23 13:44:59 -06:00
py-threadevent.c
py-tui.c Add gdb.events.tui_enabled 2024-11-01 11:06:47 -06:00
py-type.c Convert type copying to new hash table 2024-11-25 22:07:04 -05:00
py-uiout.h Add line-number styling 2024-09-30 13:23:35 -06:00
py-unwind.c gdb: Migrate frame unwinders to use C++ classes 2025-01-17 11:49:16 -03:00
py-utils.c [gdb/python] Make sure python sys.exit makes gdb exit 2024-09-25 19:29:57 +02:00
py-value.c Reject non-string types in gdb.Value.lazy_string 2024-12-09 14:17:21 -07:00
py-varobj.c
py-xmethods.c
python-config.py
python-internal.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00
python.c gdb/python: handle non-utf-8 character from gdb.execute() 2025-03-15 12:36:46 +00:00
python.h Run check-include-guards.py 2024-12-18 10:00:44 -07:00