]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-98894: Quote test_dtrace tracer subcommands (#152901)
authorstratakis <cstratak@redhat.com>
Thu, 9 Jul 2026 20:43:54 +0000 (22:43 +0200)
committerGitHub <noreply@github.com>
Thu, 9 Jul 2026 20:43:54 +0000 (22:43 +0200)
Use shlex.join() when building tracer -c command strings
for avoiding issues with spaces.

Lib/test/test_dtrace.py

index e1662a70b26d3e34a67a78eee466f9f597655b2a..30731b8f90ac14d83ce987cdd2edf73e111fdbed 100644 (file)
@@ -1,6 +1,7 @@
 import dis
 import os.path
 import re
+import shlex
 import signal
 import subprocess
 import sys
@@ -92,7 +93,7 @@ def run_readelf(cmd):
 
     if proc.returncode:
         raise AssertionError(
-            f"Command {' '.join(cmd)!r} failed "
+            f"Command {shlex.join(cmd)!r} failed "
             f"with exit code {proc.returncode}: "
             f"stdout={stdout!r} stderr={stderr!r}"
         )
@@ -139,7 +140,7 @@ class TraceBackend:
             raise
         if check_returncode and proc.returncode:
             raise AssertionError(
-                f"Command {' '.join(command)!r} failed "
+                f"Command {shlex.join(command)!r} failed "
                 f"with exit code {proc.returncode}: output={stdout!r}"
             )
         return stdout
@@ -148,7 +149,7 @@ class TraceBackend:
         python_flags = []
         if optimize_python:
             python_flags.extend(["-O"] * optimize_python)
-        subcommand = " ".join([sys.executable] + python_flags + [python_file])
+        subcommand = shlex.join([sys.executable] + python_flags + [python_file])
         return self.trace(script_file, subcommand, timeout=60,
                           check_returncode=True)
 
@@ -276,7 +277,7 @@ gc__done:1""",
 
         try:
             proc = create_process_group(
-                ["bpftrace", "-e", program, "-c", " ".join(subcommand)],
+                ["bpftrace", "-e", program, "-c", shlex.join(subcommand)],
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE,
                 universal_newlines=True,
@@ -314,7 +315,8 @@ gc__done:1""",
         program = f'usdt:{sys.executable}:python:function__entry {{ printf("probe: success\\n"); exit(); }}'
         try:
             proc = create_process_group(
-                ["bpftrace", "-e", program, "-c", f"{sys.executable} -c pass"],
+                ["bpftrace", "-e", program, "-c",
+                 shlex.join([sys.executable, "-c", "pass"])],
                 stdout=subprocess.PIPE,
                 stderr=subprocess.PIPE,
                 universal_newlines=True,