diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-10-14 12:02:39 +0200 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-10-14 12:02:39 +0200 |
commit | 78bbe496aea0f410047563b0a7952c395d4d4706 (patch) | |
tree | f71fd7d58afd114ed9419b7cfb5437e6d5be45d2 /Objects | |
parent | 47e00fb4590ae2c64ec02a77a20af8130173b27d (diff) | |
download | cpython-78bbe496aea0f410047563b0a7952c395d4d4706.tar.gz |
_PyBytesWriter_Alloc(): only use 10 bytes of the small buffer in debug mode to
enhance code to detect buffer under- and overflow.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/bytesobject.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index 2d4cf4b9ec..88106477d2 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -4053,8 +4053,20 @@ _PyBytesWriter_Alloc(_PyBytesWriter *writer, Py_ssize_t size) writer->use_small_buffer = 1; #ifdef Py_DEBUG - /* the last byte is reserved, it must be '\0' */ 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; #else writer->allocated = sizeof(writer->small_buffer); |