python / python/cpython

sqlite3 command-line interface crashes on a NUL byte or lone surrogate in an input line

未關閉
#153,731 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

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

描述

Bug description

The python -m sqlite3 interactive shell crashes with a traceback and exits
when an input line contains an embedded NUL byte, or a lone surrogate under a
surrogateescape stdin. sqlite3.complete_statement() raises ValueError
(embedded NUL) or UnicodeEncodeError (lone surrogate); neither is a
sqlite3.Error, so it escapes the REPL instead of being reported like an
ordinary error.

$ printf "SELECT '\0';\nSELECT 1;\n" | python -m sqlite3
sqlite> Traceback (most recent call last):
  ...
ValueError: embedded null character

The following SELECT 1; never runs. Invalid SQL and unknown dot-commands, by
contrast, print a clean error and keep the shell running.

CPython versions tested on

3.14, 3.15, 3.16

Operating systems tested on

macOS

Linked PRs
  • gh-153732

貢獻指南

開啟貢獻指南

從這裡開始

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

研究方向

首先,透過互動式 shell python -m sqlite3 執行回報的輸入,並檢查它如何呼叫 sqlite3.complete_statement()。當包含 NUL 位元組和孤立 surrogate 的輸入產生乾淨的錯誤,同時 shell 仍持續執行並處理後續陳述式時,即表示完成。

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

評估

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

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

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