diff options
author | Larry Hastings <larry@hastings.org> | 2015-11-23 07:27:07 (GMT) |
---|---|---|
committer | Larry Hastings <larry@hastings.org> | 2015-11-23 07:27:07 (GMT) |
commit | 3715cab3cb6bc689c66e7aaaeb86fbf953fe0262 (patch) | |
tree | 2135159f044b692a6b8d22eef78b18d8b8e7cd43 /Modules | |
parent | ba11daa4e880e16d56ed02e7e14d95f3b2c44eaf (diff) | |
parent | 3987fefd6f7309a36fb093cbfe229afe7b39406b (diff) | |
download | cpython-3715cab3cb6bc689c66e7aaaeb86fbf953fe0262.zip cpython-3715cab3cb6bc689c66e7aaaeb86fbf953fe0262.tar.gz cpython-3715cab3cb6bc689c66e7aaaeb86fbf953fe0262.tar.bz2 |
Merge 3.5.1rc1 release changes back into main 3.5 branch.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_elementtree.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 911b5ac..744e833 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -1711,7 +1711,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) Py_ssize_t start, stop, step, slicelen, newlen, cur, i; PyObject* recycle = NULL; - PyObject* seq = NULL; + PyObject* seq; if (!self->extra) { if (create_extra(self, NULL) < 0) @@ -1790,21 +1790,21 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) Py_XDECREF(recycle); return 0; } - else { - /* A new slice is actually being assigned */ - seq = PySequence_Fast(value, ""); - if (!seq) { - PyErr_Format( - PyExc_TypeError, - "expected sequence, not \"%.200s\"", Py_TYPE(value)->tp_name - ); - return -1; - } - newlen = PySequence_Size(seq); + + /* A new slice is actually being assigned */ + seq = PySequence_Fast(value, ""); + if (!seq) { + PyErr_Format( + PyExc_TypeError, + "expected sequence, not \"%.200s\"", Py_TYPE(value)->tp_name + ); + return -1; } + newlen = PySequence_Size(seq); if (step != 1 && newlen != slicelen) { + Py_DECREF(seq); PyErr_Format(PyExc_ValueError, "attempt to assign sequence of size %zd " "to extended slice of size %zd", @@ -1816,9 +1816,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) /* Resize before creating the recycle bin, to prevent refleaks. */ if (newlen > slicelen) { if (element_resize(self, newlen - slicelen) < 0) { - if (seq) { - Py_DECREF(seq); - } + Py_DECREF(seq); return -1; } } @@ -1829,9 +1827,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) we're done modifying the element */ recycle = PyList_New(slicelen); if (!recycle) { - if (seq) { - Py_DECREF(seq); - } + Py_DECREF(seq); return -1; } for (cur = start, i = 0; i < slicelen; @@ -1859,9 +1855,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) self->extra->length += newlen - slicelen; - if (seq) { - Py_DECREF(seq); - } + Py_DECREF(seq); /* discard the recycle bin, and everything in it */ Py_XDECREF(recycle); @@ -1927,6 +1921,12 @@ static int element_setattro(ElementObject* self, PyObject* nameobj, PyObject* value) { char *name = ""; + + if (value == NULL) { + PyErr_SetString(PyExc_AttributeError, + "can't delete attribute"); + return -1; + } if (PyUnicode_Check(nameobj)) name = _PyUnicode_AsString(nameobj); if (name == NULL) |