mirror of https://github.com/python/cpython
_PyBytesWriter_Alloc(): only use 10 bytes of the small buffer in debug mode to
enhance code to detect buffer under- and overflow.
This commit is contained in:
parent
f091033b14
commit
f6358a7e4c
|
@ -4053,8 +4053,20 @@ _PyBytesWriter_Alloc(_PyBytesWriter *writer, Py_ssize_t size)
|
||||||
|
|
||||||
writer->use_small_buffer = 1;
|
writer->use_small_buffer = 1;
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
/* the last byte is reserved, it must be '\0' */
|
|
||||||
writer->allocated = sizeof(writer->small_buffer) - 1;
|
writer->allocated = sizeof(writer->small_buffer) - 1;
|
||||||
|
/* In debug mode, don't use the full small buffer because it is less
|
||||||
|
efficient than bytes and bytearray objects to detect buffer underflow
|
||||||
|
and buffer overflow. Use 10 bytes of the small buffer to test also
|
||||||
|
code using the smaller buffer in debug mode.
|
||||||
|
|
||||||
|
Don't modify the _PyBytesWriter structure (use a shorter small buffer)
|
||||||
|
in debug mode to also be able to detect stack overflow when running
|
||||||
|
tests in debug mode. The _PyBytesWriter is large (more than 512 bytes),
|
||||||
|
if Py_EnterRecursiveCall() is not used in deep C callback, we may hit a
|
||||||
|
stack overflow. */
|
||||||
|
writer->allocated = Py_MIN(writer->allocated, 10);
|
||||||
|
/* _PyBytesWriter_CheckConsistency() requires the last byte to be 0,
|
||||||
|
to detect buffer overflow */
|
||||||
writer->small_buffer[writer->allocated] = 0;
|
writer->small_buffer[writer->allocated] = 0;
|
||||||
#else
|
#else
|
||||||
writer->allocated = sizeof(writer->small_buffer);
|
writer->allocated = sizeof(writer->small_buffer);
|
||||||
|
|
Loading…
Reference in New Issue