Mercurial > cpython-lru_cache-weakref
diff Objects/bytesobject.c @ 41597:cb3c92062ec4
Add trailing null bytes to a few more places.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Fri, 04 May 2007 04:27:16 +0000 |
| parents | 2c54763c4504 |
| children | ca448c607b14 |
line wrap: on
line diff
--- a/Objects/bytesobject.c Fri May 04 04:17:33 2007 +0000 +++ b/Objects/bytesobject.c Fri May 04 04:27:16 2007 +0000 @@ -138,11 +138,12 @@ if (size < alloc / 2) { /* Major downsize; resize down to exact size */ - alloc = size; + alloc = size + 1; } else if (size < alloc) { /* Within allocated size; quick exit */ ((PyBytesObject *)self)->ob_size = size; + ((PyBytesObject *)self)->ob_bytes[size] = '\0'; /* Trailing null byte */ return 0; } else if (size <= alloc * 1.125) { @@ -151,10 +152,8 @@ } else { /* Major upsize; resize up to exact size */ - alloc = size; + alloc = size + 1; } - if (alloc <= size) - alloc = size + 1; sval = PyMem_Realloc(((PyBytesObject *)self)->ob_bytes, alloc); if (sval == NULL) { @@ -165,7 +164,6 @@ ((PyBytesObject *)self)->ob_bytes = sval; ((PyBytesObject *)self)->ob_size = size; ((PyBytesObject *)self)->ob_alloc = alloc; - ((PyBytesObject *)self)->ob_bytes[size] = '\0'; /* Trailing null byte */ return 0; @@ -231,8 +229,10 @@ size = mysize + osize; if (size < 0) return PyErr_NoMemory(); - if (size < self->ob_alloc) + if (size < self->ob_alloc) { self->ob_size = size; + self->ob_bytes[self->ob_size] = '\0'; /* Trailing null byte */ + } else if (PyBytes_Resize((PyObject *)self, size) < 0) return NULL; memcpy(self->ob_bytes + mysize, optr, osize); @@ -278,8 +278,10 @@ size = mysize * count; if (count != 0 && size / count != mysize) return PyErr_NoMemory(); - if (size < self->ob_alloc) + if (size < self->ob_alloc) { self->ob_size = size; + self->ob_bytes[self->ob_size] = '\0'; /* Trailing null byte */ + } else if (PyBytes_Resize((PyObject *)self, size) < 0) return NULL; @@ -713,8 +715,10 @@ } bytes = PyString_AS_STRING(encoded); size = PyString_GET_SIZE(encoded); - if (size < self->ob_alloc) + if (size < self->ob_alloc) { self->ob_size = size; + self->ob_bytes[self->ob_size] = '\0'; /* Trailing null byte */ + } else if (PyBytes_Resize((PyObject *)self, size) < 0) { Py_DECREF(encoded); return -1;
