bpo-43660: Fix crash when displaying exceptions with custom values for sys.stderr (GH-25075)

diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 5b004c2..ee39375 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -1512,6 +1512,21 @@ def test_asyncgen_hooks(self):
         self.assertIsNone(cur.firstiter)
         self.assertIsNone(cur.finalizer)
 
+    def test_changing_sys_stderr_and_removing_reference(self):
+        # If the default displayhook doesn't take a strong reference
+        # to sys.stderr the following code can crash. See bpo-43660
+        # for more details.
+        code = textwrap.dedent('''
+            import sys
+            class MyStderr:
+                def write(self, s):
+                    sys.stderr = None
+            sys.stderr = MyStderr()
+            1/0
+        ''')
+        rc, out, err = assert_python_failure('-c', code)
+        self.assertEqual(out, b"")
+        self.assertEqual(err, b"")
 
 if __name__ == "__main__":
     unittest.main()