python / python/cpython

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

Abierto
#157,325 1 comentario 0 reacciones 1 asignado Ver en GitHub

@StanFromIreland ya está trabajando en esto.

Desde el 11/9/2026.

extension-modules type-bug
Lenguaje dominante
Python
Estrellas
77.2k
Forks
35.9k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.