From bea424af98468a7fc5c505c949218e22862d2b40 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 3 Apr 2010 00:57:33 +0000 Subject: [PATCH] more _PyString_Resize error checking --- Objects/fileobject.c | 18 ++++++++++-------- Objects/unicodeobject.c | 12 ++++++++---- Python/marshal.c | 3 ++- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 7c65b98f65f..f479501581e 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -1102,8 +1102,8 @@ file_read(PyFileObject *f, PyObject *args) break; } } - if (bytesread != buffersize) - _PyString_Resize(&v, bytesread); + if (bytesread != buffersize && _PyString_Resize(&v, bytesread)) + return NULL; return v; } @@ -1356,8 +1356,8 @@ getline_via_fgets(PyFileObject *f, FILE *fp) /* overwrite the trailing null byte */ pvfree = BUF(v) + (prev_v_size - 1); } - if (BUF(v) + total_v_size != p) - _PyString_Resize(&v, p - BUF(v)); + if (BUF(v) + total_v_size != p && _PyString_Resize(&v, p - BUF(v))) + return NULL; return v; #undef INITBUFSIZE #undef MAXBUFSIZE @@ -1469,8 +1469,8 @@ get_line(PyFileObject *f, int n) } used_v_size = buf - BUF(v); - if (used_v_size != total_v_size) - _PyString_Resize(&v, used_v_size); + if (used_v_size != total_v_size && _PyString_Resize(&v, used_v_size)) + return NULL; return v; } @@ -1536,8 +1536,10 @@ PyFile_GetLine(PyObject *f, int n) "EOF when reading a line"); } else if (s[len-1] == '\n') { - if (result->ob_refcnt == 1) - _PyString_Resize(&result, len-1); + if (result->ob_refcnt == 1) { + if (_PyString_Resize(&result, len-1)) + return NULL; + } else { PyObject *v; v = PyString_FromStringAndSize(s, len-1); diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 930d58c803c..aab33b50c0e 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -1848,7 +1848,8 @@ encode_char: if (inShift) *out++ = '-'; - _PyString_Resize(&v, out - start); + if (_PyString_Resize(&v, out - start)) + return NULL; return v; } @@ -2169,7 +2170,8 @@ PyUnicode_EncodeUTF8(const Py_UNICODE *s, /* Cut back to size actually needed. */ nneeded = p - PyString_AS_STRING(v); assert(nneeded <= nallocated); - _PyString_Resize(&v, nneeded); + if (_PyString_Resize(&v, nneeded)) + return NULL; } return v; @@ -3129,7 +3131,8 @@ PyObject *unicodeescape_string(const Py_UNICODE *s, *p++ = PyString_AS_STRING(repr)[1]; *p = '\0'; - _PyString_Resize(&repr, p - PyString_AS_STRING(repr)); + if (_PyString_Resize(&repr, p - PyString_AS_STRING(repr))) + return NULL; return repr; } @@ -3350,7 +3353,8 @@ PyObject *PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, *p++ = (char) ch; } *p = '\0'; - _PyString_Resize(&repr, p - q); + if (_PyString_Resize(&repr, p - q)) + return NULL; return repr; } diff --git a/Python/marshal.c b/Python/marshal.c index c7015d2eb7b..9e4a6926a55 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -1237,7 +1237,8 @@ PyMarshal_WriteObjectToString(PyObject *x, int version) "too much marshall data for a string"); return NULL; } - _PyString_Resize(&wf.str, (Py_ssize_t)(wf.ptr - base)); + if (_PyString_Resize(&wf.str, (Py_ssize_t)(wf.ptr - base))) + return NULL; } if (wf.error != WFERR_OK) { Py_XDECREF(wf.str);