Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

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

オープン
#1,671 コメント 7 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
28/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
停滞
技術スタック
python
領域
devtools

調査の方向性

まず、報告にある親ディレクトリのパスとコマンドで失敗を再現し、次に debugpy/launcher、server/cli.py、vendored の pydevd_runpy.py のエントリポイントをたどって traceback を追跡します。報告された文字を含むディレクトリ配下のファイルで、shell の失敗や FileNotFoundError を発生させずにデバッグが動作すれば完了です。この issue では、リポジトリのテストや実装ファイルは指定されていません。

索引モデルが issue の本文から書いたものです。

説明

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.

主要言語
Python
スター
2.5k
フォーク
202
平均マージ
5日 1時間
マージ済み PR(30日)
1

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

microsoft/debugpy のほかの issue

microsoft/debugpy の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。