[Python-checkins] bpo-31428: Prevent raising a SystemError in case the memo arg of ElementTree.Element.__deepcopy__() isn't a dictionary. (#3512)
Serhiy Storchaka
webhook-mailer at python.org
Tue Sep 12 10:39:20 EDT 2017
https://github.com/python/cpython/commit/d056818ed2ade6d28190a375d7183f4aef9caa55
commit: d056818ed2ade6d28190a375d7183f4aef9caa55
branch: master
author: Oren Milman <orenmn at gmail.com>
committer: Serhiy Storchaka <storchaka at gmail.com>
date: 2017-09-12T17:39:15+03:00
summary:
bpo-31428: Prevent raising a SystemError in case the memo arg of ElementTree.Element.__deepcopy__() isn't a dictionary. (#3512)
files:
M Modules/_elementtree.c
M Modules/clinic/_elementtree.c.h
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index 857005a2a9b..98d5e7f5062 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -733,14 +733,14 @@ LOCAL(PyObject *) deepcopy(PyObject *, PyObject *);
/*[clinic input]
_elementtree.Element.__deepcopy__
- memo: object
+ memo: object(subclass_of="&PyDict_Type")
/
[clinic start generated code]*/
static PyObject *
-_elementtree_Element___deepcopy__(ElementObject *self, PyObject *memo)
-/*[clinic end generated code: output=d1f19851d17bf239 input=df24c2b602430b77]*/
+_elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo)
+/*[clinic end generated code: output=eefc3df50465b642 input=a2d40348c0aade10]*/
{
Py_ssize_t i;
ElementObject* element;
@@ -849,7 +849,8 @@ deepcopy(PyObject *object, PyObject *memo)
/* Fall through to general case */
}
else if (Element_CheckExact(object)) {
- return _elementtree_Element___deepcopy__((ElementObject *)object, memo);
+ return _elementtree_Element___deepcopy___impl(
+ (ElementObject *)object, memo);
}
}
diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h
index 19a77978f36..9563afa88d0 100644
--- a/Modules/clinic/_elementtree.c.h
+++ b/Modules/clinic/_elementtree.c.h
@@ -70,6 +70,24 @@ PyDoc_STRVAR(_elementtree_Element___deepcopy____doc__,
#define _ELEMENTTREE_ELEMENT___DEEPCOPY___METHODDEF \
{"__deepcopy__", (PyCFunction)_elementtree_Element___deepcopy__, METH_O, _elementtree_Element___deepcopy____doc__},
+static PyObject *
+_elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo);
+
+static PyObject *
+_elementtree_Element___deepcopy__(ElementObject *self, PyObject *arg)
+{
+ PyObject *return_value = NULL;
+ PyObject *memo;
+
+ if (!PyArg_Parse(arg, "O!:__deepcopy__", &PyDict_Type, &memo)) {
+ goto exit;
+ }
+ return_value = _elementtree_Element___deepcopy___impl(self, memo);
+
+exit:
+ return return_value;
+}
+
PyDoc_STRVAR(_elementtree_Element___sizeof____doc__,
"__sizeof__($self, /)\n"
"--\n"
@@ -731,4 +749,4 @@ _elementtree_XMLParser__setevents(XMLParserObject *self, PyObject **args, Py_ssi
exit:
return return_value;
}
-/*[clinic end generated code: output=75d0ff80e20b830f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ed55bd5209c12364 input=a9049054013a1b77]*/
More information about the Python-checkins
mailing list