python / python/cpython

Pickle `FLOAT` opcode inconsistency with whitespace

Offen
#135,580 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

extension-modules type-feature
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die Python- und C-Implementierungen von pickles FLOAT-Opcode zu lokalisieren und ihren Umgang mit den bereitgestellten Payloads zu vergleichen. Führe die Beispiele unter Python 3.13 aus und überprüfe anschließend, dass führender und nachgestellter Whitespace in beiden Implementierungen konsistent behandelt werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.