Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Specific characters in path of parent directories of file causes debugger to crash.

Open
#1,671 7 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
28/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
python
Domain
devtools

Research direction

Start by reproducing the failure with the parent-directory paths and commands in the report, then follow the traceback through debugpy/launcher, server/cli.py, and the vendored pydevd_runpy.py entry points. Done means debugging works for files beneath directories containing the reported characters without a shell or FileNotFoundError failure; the issue does not name a repository test or implementation file.

Written by the indexing model from the issue text.

Description

bug
Summary

I've managed to break the path parsing. Specifically, including certain characters in the parent directories of the file being debugged causes the debugger to crash.

I don't know what specific characters cause this, but I'll update the report when(/if) I do.

Reproduction
  1. Directory-Caused Crash

    The undermentioned path, which contains a normal filename (testfile.py) but an abnormally named immediate parent directory:

    /home/RokeJulianLockhart/Documents/  [-]	`{title: "Code",	id: ""}`{.JSON5}.dir/testfile.py
    

    ...causes ms-python.debugpy to crash:

    RokeJulianLockhart@sayw4i:~/Documents$  cd /home/RokeJulianLockhart/Documents/\ \ \[-\]\`\{title:\ \"Code\",id:\ \"\"\}\`\{.JSON5\}.dir ; /usr/bin/env /usr/bin/python3 /home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher 47225 -- /home/RokeJulianLockhart/Documents/\ \ \[-\]\`\{title:\ \"Code\",id:\ \"\"\}\`\{.JSON5\}.dir/testfile.py 
    bash: cd: /home/RokeJulianLockhart/Documents/  [-]`{title: "Code",id: ""}`{.JSON5}.dir: No such file or directory
    Traceback (most recent call last):
      File "/usr/lib64/python3.12/runpy.py", line 198, in _run_module_as_main
        return _run_code(code, main_globals, None,
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib64/python3.12/runpy.py", line 88, in _run_code
        exec(code, run_globals)
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/__main__.py", line 71, in <module>
        cli.main()
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 486, in main
        run()
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 336, in run_file
        runpy.run_path(target, run_name="__main__")
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 320, in run_path
        code, fname = _get_code_from_file(run_name, path_name)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 289, in _get_code_from_file
        with io_open_code(decoded_path) as f:
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    FileNotFoundError: [Errno 2] No such file or directory: '/home/RokeJulianLockhart/Documents/  [-]`{title: "Code",id: ""}`{.JSON5}.dir/testfile.py'
    RokeJulianLockhart@sayw4i:~/Documents$
    

    Merely one directory in the absolute path of the file need contain such characters for the parsing to fail, as the undermentioned "Terminal" log from ms-python.debugpy demonstrates:

    RokeJulianLockhart@sayw4i:~/Documents$  cd /home/RokeJulianLockhart/Documents/\ \ \[-\]\`\{title:\ \"Code\",id:\ \"\"\}\`\{.JSON5\}.dir/test_directory ; /usr/bin/env /usr/bin/python3 /home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher 47783 -- /home/RokeJulianLockhart/Documents/\ \ \[-\]\`\{title:\ \"Code\",id:\ \"\"\}\`\{.JSON5\}.dir/test_directory/test_file.py 
    bash: cd: /home/RokeJulianLockhart/Documents/  [-]`{title: "Code",id: ""}`{.JSON5}.dir/test_directory: No such file or directory
    Traceback (most recent call last):
      File "/usr/lib64/python3.12/runpy.py", line 198, in _run_module_as_main
        return _run_code(code, main_globals, None,
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib64/python3.12/runpy.py", line 88, in _run_code
        exec(code, run_globals)
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/__main__.py", line 71, in <module>
        cli.main()
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 486, in main
        run()
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 336, in run_file
        runpy.run_path(target, run_name="__main__")
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 320, in run_path
        code, fname = _get_code_from_file(run_name, path_name)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 289, in _get_code_from_file
        with io_open_code(decoded_path) as f:
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    FileNotFoundError: [Errno 2] No such file or directory: '/home/RokeJulianLockhart/Documents/  [-]`{title: "Code",id: ""}`{.JSON5}.dir/test_directory/test_file.py'
    RokeJulianLockhart@sayw4i:~/Documents$
    
  2. If I put the file deep enough (like this example) it completely breaks. Enter doesn't work because the path is incorrectly escaped, so ^C is necessary to exit the transient debug state:

    RokeJulianLockhart@sayw4i:~/Software/Git/GitLab.com/RokeJulianLockhart/sg5n9q/  [-]     `{title: "Non-Metadata",        id: "s1gvg2"}`{.JSON5}.dir/  [-]        `{title: "Technical",   id: "s20cxw"}`{.JSON5}.dir/  [-]        `{title: "Applications",        id: ""}`{.JSON5}.dir/  [-] `{title: "Configurator",        id: "s3wrcl"}`{.JSON5}.dir/  [-]        `{title: "Code",        id: ""}`{.JSON5}.dir$  cd /home/RokeJulianLockhart/Software/Git/GitLab.com/RokeJulianLockhart/sg5n9q/\ \ \[-]\ `\{title\:\ \"\`\{title:\ \"Non-Metadata\",id:\ \"s1gvg2\"\}\`\{.JSON5\}.dir/\ \ \[-\]\`\{title:\ \"Technical\",id:\ \"s20cxw\"\}\`\{.JSON5\}.dir/\ \ \[-\]\`\{title:\ \"Applications\",id:\ \"\"\}\`\{.JSON5\}.dir/\ \ \[-\]\`\{title:\ \"Configurator\",id:\ \"s3wrcl\"\}\`\{.JSON5\}.dir/\ \ \[-\]\`\{title:\ \"Code\",id:\ \"\"\}\`\{.JSON5\}.dir ; /usr/bin/env /usr/bin/python3 /home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher 39897 -- /home/RokeJulianLockhart/Software/Git/GitLab.com/RokeJulianLockhart/sg5n9q/\ \ \[-\]\`\{title:\ \"Non-Metadata\",id:\ \"s1gvg2\"\}\`\{.JSON5\}.dir/\ \ \[-\]\`\{title:\ \"Technical\",id:\ \"s20cxw\"\}\`\{.JSON5\}.dir/\ \ \[-\]\`\{title:\ \"Applications\",id:\ \"\"\}\`\{.JSON5\}.dir/\ \ \[-\]\`\{title:\ \"Configurator\",id:\ \"s3wrcl\"\}\`\{.JSON5\}.dir/\ \ \[-\]\`\{title:\ \"Code\",id:\ \"\"\}\`\{.JSON5\}.dir/.\ \[-\]\`\`\{title:\ \"\`platform.uname\(\)\`\{.Py\}\ Field\ Output\",id:\ \"sgskr5\"\}\`\`\{.JSON5\}.txt.Py 
    > 
    > ^C
    RokeJulianLockhart@sayw4i:~/Software/Git/GitLab.com/RokeJulianLockhart/sg5n9q/  [-]     `{title: "Non-Metadata",        id: "s1gvg2"}`{.JSON5}.dir/  [-]        `{title: "Technical",   id: "s20cxw"}`{.JSON5}.dir/  [-]        `{title: "Applications",        id: ""}`{.JSON5}.dir/  [-] `{title: "Configurator",        id: "s3wrcl"}`{.JSON5}.dir/  [-]        `{title: "Code",        id: ""}`{.JSON5}.dir$
    

    This causes https://github.com/microsoft/debugpy/issues/1677 to occur:

    Screenshot_20240914_145708

  3. Debugger Functioning with Unusual Filename

    Note that this doesn't apply to the file's name. Consider the undermentioned example:

    /home/RokeJulianLockhart/Documents/. [-]	``{title: "`platform.uname()`{.Py} Field Output",	id: "sgskr5"}``{.JSON5}.txt.Py
    

    As the undermentioned "Terminal" log demonstrates, it functions:

    RokeJulianLockhart@sayw4i:~/Documents$  cd /home/RokeJulianLockhart/Documents ; /usr/bin/env /usr/bin/python3 /home/RokeJulianLockhart/.vscode-insiders/extensions/ms-python.debugpy-2024.11.2024082901-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher 38369 -- /home/RokeJulianLockhart/Documents/.\ \[-\]\        \`\`\{title\:\ \"\`platform.uname\(\)\`\{.Py\}\ Field\ Output\"\,\      id\:\ \"sgskr5\"\}\`\`\{.JSON5\}.txt.Py \`\`\{title:\ \"\`platform.uname\(\)\`\{.Py\}\ Field\ Output\",id:\ \"sgskr5\"\}\`\`\{.JSON5\}.txt.Py 
    for k, v in platform_uname_as_dict.items()
    system = Linux
    node = sayw4i
    release = 6.10.10-200.fc40.x86_64
    version = microsoft/vscode-python-debugger#1 SMP PREEMPT_DYNAMIC Thu Sep 12 18:26:09 UTC 2024
    machine = x86_64
    processor = 
    RokeJulianLockhart@sayw4i:~/Documents$
    
Environment
  1. Filename Character Support

    One must be using a filesystem and OS that support such characters. I use BTRFS on Fedora 40, but anything comparable should work. ^2

  2. Versions
    1. Code
      1. #!/usr/bin/env sh
        rpm -q 'code' 'code-insiders'
        
      2. code-1.93.1-1726079369.el8.x86_64
        code-insiders-1.94.0-1726207949.el8.x86_64
        
    2. Debugger

      marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/debugpy/2024.11.2024082901/vspackage?targetPlatform=linux-x64 ^1

Miscellaneous

Potentially related to https://github.com/microsoft/vscode-python-debugger/issues/233#issue-2152958262, although I doubt it, because /home/RokeJulianLockhart/Documents/Text File.txt.py works.

Dominant language
Python
Stars
2.5k
Forks
202
Avg merge
5d 1h
Merged PRs (30d)
1

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from microsoft/debugpy

All issues in microsoft/debugpy

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.