`Base64Decoder` raises `DecodeError` on line-wrapped (MIME-style) base64
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 25/100
Direzione di ricerca
Start by reading Base64Decoder.write() and reproduce the failure with the provided CRLF example, then try split writes and base64.encodebytes data in small chunks. A regression test should show that MIME-wrapped input decodes to the expected bytes regardless of line breaks or chunk boundaries; pull request #341 already submits a fix.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Base64Decoder.write() slices the input to a multiple of 4 bytes before decoding, but it counts line breaks and spaces as base64 characters. Standard base64 as used in MIME (RFC 2045) is wrapped with CRLF or LF, so any quartet that straddles a line break is miscounted and decoding fails. The result also depends on how the stream is chunked.
Reproduction
from io import BytesIO
from python_multipart.decoders import Base64Decoder
out = BytesIO()
d = Base64Decoder(out)
d.write(b"Zm9v\r\nYmFy") # DecodeError
d.finalize()
Expected: b"foobar", which is what base64.b64decode(b"Zm9v\r\nYmFy") returns.
Split writes fail the same way:
d.write(b"Zm9v\r")
d.write(b"\nYmFy") # DecodeError
base64.encodebytes(bytes(range(200))) (76-character lines) written in chunks of 10, 7 or 1 bytes also raises DecodeError.
Cause
write() computes decode_len = (len(data) // 4) * 4 on data that still contains \r, \n, space and tab. b64decode() then discards those bytes (it is not called with validate=True), leaving a slice that is not a multiple of 4, and raises "Incorrect padding".
Version: python-multipart 0.0.32, main at 51ff1a4, Python 3.13.
Fix
A fix with a regression test is submitted in #341.
- Lingua principale
- Python
- Stelle
- 537
- Fork
- 104
- Merge medio
- 3h
- PR unite (30g)
- 4
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Kludex/python-multipart
-
Add streaming field limits to `FormParser`Forse già presa @Kludex l’ha presa 19 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
Kludex/python-multipart#332 ·
I maintainer di solito rispondono entro 1 giorno
-
Clarify or handle non-Latin-1 str input in parse_options_headerForse già presa @gyanu2507 l’ha presa 61 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
Kludex/python-multipart#319 ·
I maintainer di solito rispondono entro 1 giorno
-
How to set FormParser MAX_BODY_SIZE, MAX_MEMORY_FILE_SIZE?Forse già presa @dokson l’ha presa 139 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
Kludex/python-multipart#201 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Skip header area?Forse già presa @Kludex l’ha presa 196 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
Kludex/python-multipart#59 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Failing to parse non-standard line breaksForse già presa @dokson l’ha presa 139 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 32/100
Kludex/python-multipart#31 · 4 commenti · 4 reazioni ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Kludex/python-multipart
Issue simili
-
Python Volcengine provider returns failures instead of raising themForse già presa @Ricardo-M-L l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
agent-infra/sandbox#248 ·
-
Textractor leaves empty temporary files when remote retrieval failsForse già presa @HuaTNA l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
test(bm_generation): pin the learning parameters and CPU sync shortcutForse già presa @iloveeyjafjalla l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
qboson/kaiwu-pytorch-plugin#1341 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
elder-plinius/V3R1T4S#625 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
foxglove/mcap#1907 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno