python / python/cpython

Pickle `FLOAT` opcode inconsistency with whitespace

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

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

extension-modules type-feature
主要言語
Python
スター
77.2k
フォーク
35.9k
PR マージ指標
PR 指標を取得中

説明

Bug report

Bug description:

A lot of Python code tolerates leading and trailing whitespace in string-to-number conversions. However, in the FLOAT opcode of pickle, the Python implementation can tolerate leading/trailing whitespace, while the C implementation throws an error and can't convert it. Note that the INT opcode can gracefully handle leading/trailing whitespace (in both Python and C).

Payloads:

payload:      b'F 5\n.'

pickle:       5.0
_pickle.c:    FAILURE could not convert string to float: ' 5
'
pickletools:
    0: F    FLOAT      5.0
    4: .    STOP
highest protocol among opcodes = 0
payload:      b'F5 \n.'

pickle:       5.0
_pickle.c:    FAILURE could not convert string to float
pickletools:
    0: F    FLOAT      5.0
    4: .    STOP
highest protocol among opcodes = 0
payload:      b'I 5 \n.'

pickle:       5
_pickle.c:    5
pickletools:  
    0: I    INT        5
    5: .    STOP
highest protocol among opcodes = 0
CPython versions tested on:

3.13

Operating systems tested on:

Linux

Linked PRs
  • gh-135619

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

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

はじめの一歩

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

調査の方向性

まず、pickle の FLOAT opcode の Python 実装と C 実装を見つけ、提供された payload の扱いを比較します。Python 3.13 で例を実行し、その後、先頭と末尾の空白が両方の実装で一貫して処理されることを確認します。

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

評価

技術スタック
python
領域
backend
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
35/100

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

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