diff options
author | Berker Peksag <berker.peksag@gmail.com> | 2016-09-16 14:31:06 (GMT) |
---|---|---|
committer | Berker Peksag <berker.peksag@gmail.com> | 2016-09-16 14:31:06 (GMT) |
commit | 4a72a7b6c4c95f7613486f0e4e20a3d4815a16c5 (patch) | |
tree | b324021153abfe7835d6793a5ff6bacdae805131 /Objects | |
parent | a4961e555b9b6b684f123cdbe426b4da22a1b460 (diff) | |
download | cpython-4a72a7b6c4c95f7613486f0e4e20a3d4815a16c5.zip cpython-4a72a7b6c4c95f7613486f0e4e20a3d4815a16c5.tar.gz cpython-4a72a7b6c4c95f7613486f0e4e20a3d4815a16c5.tar.bz2 |
Issue #25270: Prevent codecs.escape_encode() from raising SystemError when an empty bytestring is passed
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/bytesobject.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index 5934336..3934328 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -3550,11 +3550,15 @@ _PyBytes_Resize(PyObject **pv, Py_ssize_t newsize) PyObject *v; PyBytesObject *sv; v = *pv; - if (!PyBytes_Check(v) || Py_REFCNT(v) != 1 || newsize < 0) { - *pv = 0; - Py_DECREF(v); - PyErr_BadInternalCall(); - return -1; + if (!PyBytes_Check(v) || newsize < 0) { + goto error; + } + if (Py_SIZE(v) == newsize) { + /* return early if newsize equals to v->ob_size */ + return 0; + } + if (Py_REFCNT(v) != 1) { + goto error; } /* XXX UNREF/NEWREF interface should be more symmetrical */ _Py_DEC_REFTOTAL; @@ -3572,6 +3576,11 @@ _PyBytes_Resize(PyObject **pv, Py_ssize_t newsize) sv->ob_sval[newsize] = '\0'; sv->ob_shash = -1; /* invalidate cached hash value */ return 0; +error: + *pv = 0; + Py_DECREF(v); + PyErr_BadInternalCall(); + return -1; } void |