python / python/cpython

New REPL crashes on an empty DELETE_WORD_BACKWARDS (^W) followed by CLEAR_TO_START (^K)

未關閉
#131,430 0 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

3.13 3.14 stdlib topic-repl type-bug
主要語言
Python
星號
77.2k
分支
36k
PR 合併指標
PR 指標待擷取

描述

Bug report

Bug description:

If, in the REPL, you:

  1. Delete the current word, backward, on an empty line using Control-W, then
  2. Delete to the end of line, using Control-K

The REPL will crash with an exception in readline.

Note: ^ denotes pressing the Control or Command key when pressing the next character.

>>> ^W^KTraceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib64/python3.13/_pyrepl/__main__.py", line 6, in <module>
    __pyrepl_interactive_console()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib64/python3.13/_pyrepl/main.py", line 59, in interactive_console
    run_multiline_interactive_console(console)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib64/python3.13/_pyrepl/simple_interact.py", line 143, in run_multiline_interactive_console
    statement = multiline_input(more_lines, ps1, ps2)
  File "/usr/lib64/python3.13/_pyrepl/readline.py", line 389, in multiline_input
    return reader.readline()
           ~~~~~~~~~~~~~~~^^
  File "/usr/lib64/python3.13/_pyrepl/reader.py", line 802, in readline
    self.handle1()
    ~~~~~~~~~~~~^^
  File "/usr/lib64/python3.13/_pyrepl/reader.py", line 785, in handle1
    self.do_cmd(cmd)
    ~~~~~~~~~~~^^^^^
  File "/usr/lib64/python3.13/_pyrepl/reader.py", line 710, in do_cmd
    command.do()
    ~~~~~~~~~~^^
  File "/usr/lib64/python3.13/_pyrepl/commands.py", line 157, in do
    self.kill_range(r.pos, eol + 1)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.13/_pyrepl/commands.py", line 71, in kill_range
    r.kill_ring[-1] = r.kill_ring[-1] + text
                      ~~~~~~~~~~~^^^^

This exception is caused since kill_range is not called on an empty backward_kill_word, causing kill_ring to be empty: https://github.com/pypy/pyrepl/blob/ca192a80b76700118b9bfd261a3d098b92ccfc31/pyrepl/commands.py#L152-L156

CPython versions tested on:

3.13

Operating systems tested on:

Linux

Linked PRs
  • gh-131452

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 pyrepl/commands.py 的第 152-156 行附近開始,這裡描述了向後刪除單字和 kill_range。在 REPL 中重現空白行上的 ^W 後接 ^K 序列,並追蹤 kill-ring 的狀態。當該序列不再引發回報的 readline 例外時即表示完成;連結的 PR gh-131452 顯示相關工作已經在進行中。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
cli
Issue 類型
缺陷
難度
2/5
預估耗時
1-3 小時
活躍度
停滯
描述清晰度
描述清楚
新手友好度
30/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。