hashes/adler32.py: checksum diverges from the Adler-32 spec for any non-ASCII input (sums Unicode code points instead of bytes)
I maintainer di solito rispondono entro 1 giorno
@SwetaKumari7 ci sta già lavorando.
Dal 24/10/2026.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 35/100
Direzione di ricerca
The bug is in hashes/adler32.py: adler32() sums ord() per Unicode character instead of per byte. Fix by encoding the input to UTF-8 first (or accepting bytes), mirroring how the sibling hashes/crc32.py already works against zlib.crc32. Verify with the issue's reproduction snippet comparing against zlib.adler32(text.encode()) for non-ASCII strings like '€100' and '日本語テスト', and update the doctests which only cover ASCII. Note an open pull request is already linked, so check whether work is under way before starting.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Repository commit
6e03a48579ca212a08b36be00378f887dc41a003
Python version (python --version)
Python 3.13.5
Dependencies version (pip freeze)
None needed — hashes/adler32.py only uses the standard library.
Expected behavior
Adler-32 is defined over a byte stream, so adler32(text) should produce the same value as the reference implementation on the text's UTF-8 bytes (zlib.adler32(text.encode())), for any input text. The sibling module hashes/crc32.py does exactly this (it takes bytes and matches zlib.crc32 for every input).
Actual behavior
adler32 iterates Unicode code points and sums ord(char), so it only matches the real Adler-32 for pure-ASCII text. Every non-ASCII character silently produces a checksum that no standard implementation would produce:
>>> from hashes.adler32 import adler32
>>> import zlib
>>> adler32('Algorithms')
363791387
>>> zlib.adler32('Algorithms'.encode())
363791387
>>> adler32('€100')
2211914046
>>> zlib.adler32('€100'.encode())
196018850
>>> adler32('日本語テスト')
3064850950
>>> zlib.adler32('日本語テスト'.encode())
2053180537
For a checksum/integrity algorithm, producing values that disagree with every other Adler-32 implementation (zlib, Python's zlib.adler32, etc.) for non-ASCII input makes the results unusable for verification.
Steps to reproduce
python - <<'EOF'
from hashes.adler32 import adler32
import zlib
for s in ['Algorithms', 'héllo', '€100', '日本語テスト']:
print(s, adler32(s), zlib.adler32(s.encode()), adler32(s) == zlib.adler32(s.encode()))
EOF
Output: only 'Algorithms' matches; the other three lines end with False.
Suspected cause
hashes/adler32.py (adler32(plain_text: str)) uses a = (a + ord(plain_chr)) % MOD_ADLER per character. Encoding the input to UTF-8 first (like crc32.py already requires bytes) would keep it on-spec for all inputs; the doctests only cover ASCII strings, so this never shows up in the test run.
- Lingua principale
- Python
- Stelle
- 225k
- Fork
- 51.2k
- Merge medio
- 1g 8h
- PR unite (30g)
- 40
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
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 TheAlgorithms/Python
-
ciphers/base32.py and ciphers/base85.py encode Unicode code points instead of bytes: output diverges from the spec for non-ASCII, round-trips corrupt chars >= U+0400, arbitrary bytes crashForse già presa @Nate-br l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
TheAlgorithms/Python#15636 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
ciphers/des_ecb.py: encrypt/decrypt silently corrupts any character above U+00FF (round-trip fails)Forse già presa @mohammedanasnakhuda l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
TheAlgorithms/Python#15634 ·
I maintainer di solito rispondono entro 1 giorno
-
other/password.py: alternative_password_generator ignores the requested length when the required characters exceed itForse già presa @raaj-2222 l’ha presa 2 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
TheAlgorithms/Python#15633 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
ciphers/base58.py is a copy of base64_cipher.py — no Base58 implementation exists in the fileForse già presa @SakshiYeole l’ha presa 2 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 45/100
TheAlgorithms/Python#15637 ·
I maintainer di solito rispondono entro 1 giorno
-
Optimize Node.has_loop to use constant auxiliary space instead of O(N) spaceForse già presa @mohitjoshi-hey l’ha presa 13 giorni fa. Apertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 15/100
TheAlgorithms/Python#15576 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di TheAlgorithms/Python
Issue simili
-
bug P1
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Toloka/tolokaforge#1947 ·
I maintainer di solito rispondono entro 1 giorno
-
SageMaker provider: streaming fails with NoStreamDataError on DJL Serving (LMI) endpointsForse già presa @balajiaru l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
UKGovernmentBEIS/inspect_ai#6127 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
pydot/pydot#601 · 4 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
letsencrypt/cp-cps#361 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100