python / python/cpython

Heap-buffer-overflow in the `hz` incremental decoder on a trailing `~`

Ouverte
#157,325 1 commentaire 0 réactions 1 personne assignée Voir sur GitHub

@StanFromIreland y travaille déjà.

Depuis le 11/9/2026.

extension-modules type-bug
Langage dominant
Python
Étoiles
77.2k
Forks
35.9k
Métriques de merge des PR
Métriques de PR en attente

Description

Bug report

Bug description:
import codecs
d = codecs.getincrementaldecoder('hz')()
d.decode(b'~', False)   
d.decode(b'', True)
=================================================================
==1==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x5020000040d1 at pc 0xffff7feff068 bp 0xffffd608df50 sp 0xffffd608df40
READ of size 1 at 0x5020000040d1 thread T0
    #0 0xffff7feff064 in hz_decode Modules/cjkcodecs/_codecs_cn.c:417
    #1 0xffff7fe7426c in decoder_feed_buffer Modules/cjkcodecs/multibytecodec.c:921
    #2 0xffff7fe76238 in _multibytecodec_MultibyteIncrementalDecoder_decode_impl Modules/cjkcodecs/multibytecodec.c:1214
    #3 0xffff7fe76238 in _multibytecodec_MultibyteIncrementalDecoder_decode Modules/cjkcodecs/clinic/multibytecodec.c.h:395
    #4 0xaaaad3656320 in _PyObject_VectorcallTstate Include/internal/pycore_call.h:144
    #5 0xaaaad3656320 in PyObject_Vectorcall Objects/call.c:327
    #6 0xaaaad3ca1bc8 in _Py_VectorCallInstrumentation_StackRefSteal Python/ceval.c:768
    #7 0xaaaad33d1de8 in _PyEval_EvalFrameDefault Python/generated_cases.c.h:1906
    #8 0xaaaad3cc0b1c in _PyEval_EvalFrame Include/internal/pycore_ceval.h:122
    #9 0xaaaad3cc0b1c in _PyEval_Vector Python/ceval.c:2174
    #10 0xaaaad3cc0b1c in PyEval_EvalCode Python/ceval.c:679
    #11 0xaaaad3ebfeb4 in run_mod Python/pythonrun.c:1509
    #12 0xaaaad3ec0d38 in _PyRun_File Python/pythonrun.c:1332
    #13 0xaaaad3ec4ffc in _PyRun_SimpleFile Python/pythonrun.c:544
    #14 0xaaaad3ec8dd0 in _PyRun_AnyFile Python/pythonrun.c:92
    #15 0xaaaad3f9390c in pymain_run_file_obj Modules/main.c:478
    #16 0xaaaad3f9390c in pymain_run_file Modules/main.c:494
    #17 0xaaaad3f9390c in pymain_run_python Modules/main.c:804
    #18 0xaaaad3f9390c in Py_RunMain Modules/main.c:891
    #19 0xaaaad3f95c38 in pymain_main Modules/main.c:921
    #20 0xaaaad3f95c38 in Py_BytesMain Modules/main.c:945
    #21 0xffff82c484c0  (/lib/aarch64-linux-gnu/libc.so.6+0x284c0) (BuildId: 27027b96e5b8c475fc327aa445bea1c71d37b4e2)
    #22 0xffff82c48594 in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x28594) (BuildId: 27027b96e5b8c475fc327aa445bea1c71d37b4e2)
    #23 0xaaaad343beec in _start (/src/cpython/python+0x183beec) (BuildId: eba909a3db0adabacf151d7dc3081dda7999191a)

0x5020000040d1 is located 0 bytes after 1-byte region [0x5020000040d0,0x5020000040d1)
allocated by thread T0 here:
    #0 0xffff835e76d0 in malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0xffff7fe76090 in _multibytecodec_MultibyteIncrementalDecoder_decode_impl Modules/cjkcodecs/multibytecodec.c:1201
    #2 0xffff7fe76090 in _multibytecodec_MultibyteIncrementalDecoder_decode Modules/cjkcodecs/clinic/multibytecodec.c.h:395
    #3 0xaaaad3656320 in _PyObject_VectorcallTstate Include/internal/pycore_call.h:144
    #4 0xaaaad3656320 in PyObject_Vectorcall Objects/call.c:327
    #5 0xaaaad3ca1bc8 in _Py_VectorCallInstrumentation_StackRefSteal Python/ceval.c:768
    #6 0xaaaad33d1de8 in _PyEval_EvalFrameDefault Python/generated_cases.c.h:1906
    #7 0xaaaad3cc0b1c in _PyEval_EvalFrame Include/internal/pycore_ceval.h:122
    #8 0xaaaad3cc0b1c in _PyEval_Vector Python/ceval.c:2174
    #9 0xaaaad3cc0b1c in PyEval_EvalCode Python/ceval.c:679
    #10 0xaaaad3ebfeb4 in run_mod Python/pythonrun.c:1509
    #11 0xaaaad3ec0d38 in _PyRun_File Python/pythonrun.c:1332
    #12 0xaaaad3ec4ffc in _PyRun_SimpleFile Python/pythonrun.c:544
    #13 0xaaaad3ec8dd0 in _PyRun_AnyFile Python/pythonrun.c:92
    #14 0xaaaad3f9390c in pymain_run_file_obj Modules/main.c:478
    #15 0xaaaad3f9390c in pymain_run_file Modules/main.c:494
    #16 0xaaaad3f9390c in pymain_run_python Modules/main.c:804
    #17 0xaaaad3f9390c in Py_RunMain Modules/main.c:891
    #18 0xaaaad3f95c38 in pymain_main Modules/main.c:921
    #19 0xaaaad3f95c38 in Py_BytesMain Modules/main.c:945
    #20 0xffff82c484c0  (/lib/aarch64-linux-gnu/libc.so.6+0x284c0) (BuildId: 27027b96e5b8c475fc327aa445bea1c71d37b4e2)
    #21 0xffff82c48594 in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x28594) (BuildId: 27027b96e5b8c475fc327aa445bea1c71d37b4e2)
    #22 0xaaaad343beec in _start (/src/cpython/python+0x183beec) (BuildId: eba909a3db0adabacf151d7dc3081dda7999191a)

SUMMARY: AddressSanitizer: heap-buffer-overflow Modules/cjkcodecs/_codecs_cn.c:417 in hz_decode
Shadow bytes around the buggy address:
  0x502000003e00: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fd
  0x502000003e80: fa fa fd fa fa fa fd fd fa fa fd fa fa fa fd fa
  0x502000003f00: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
  0x502000003f80: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
  0x502000004000: fa fa fd fa fa fa fd fd fa fa fd fa fa fa fd fa
=>0x502000004080: fa fa fd fa fa fa fd fa fa fa[01]fa fa fa fa fa
  0x502000004100: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x502000004180: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x502000004200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x502000004280: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x502000004300: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==1==ABORTING
CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs
  • gh-157333

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.