summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorBerker Peksag <berker.peksag@gmail.com>2016-09-16 14:31:06 (GMT)
committerBerker Peksag <berker.peksag@gmail.com>2016-09-16 14:31:06 (GMT)
commit4a72a7b6c4c95f7613486f0e4e20a3d4815a16c5 (patch)
treeb324021153abfe7835d6793a5ff6bacdae805131 /Objects
parenta4961e555b9b6b684f123cdbe426b4da22a1b460 (diff)
downloadcpython-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.c19
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