Issue #25455: Fixed a crash in repr of cElementTree.Element with recursive tag.
diff --git a/Misc/NEWS b/Misc/NEWS
index 55f44bf..b7785e5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,6 +13,8 @@
 Library
 -------
 
+- Issue #25455: Fixed a crash in repr of cElementTree.Element with recursive tag.
+
 Documentation
 -------------
 
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index 6f628a5..df97b5e 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -1222,18 +1222,28 @@
 static PyObject*
 element_repr(ElementObject* self)
 {
-    PyObject *repr, *tag;
+    int status;
 
-    tag = PyObject_Repr(self->tag);
-    if (!tag)
-        return NULL;
+    if (self->tag == NULL)
+        return PyUnicode_FromFormat("<Element at %p>", self);
 
-    repr = PyString_FromFormat("<Element %s at %p>",
-                               PyString_AS_STRING(tag), self);
+    status = Py_ReprEnter((PyObject *)self);
+    if (status == 0) {
+        PyObject *repr, *tag;
+        tag = PyObject_Repr(self->tag);
+        if (!tag)
+            return NULL;
 
-    Py_DECREF(tag);
-
-    return repr;
+        repr = PyString_FromFormat("<Element %s at %p>",
+                                   PyString_AS_STRING(tag), self);
+        Py_DECREF(tag);
+        return repr;
+    }
+    if (status > 0)
+        PyErr_Format(PyExc_RuntimeError,
+                     "reentrant call inside %s.__repr__",
+                     Py_TYPE(self)->tp_name);
+    return NULL;
 }
 
 static PyObject*