Correct a crash when two successive unicode allocations fail with a MemoryError:
the freelist contained half-initialized objects with freed pointers.

The comment
/* XXX UNREF/NEWREF interface should be more symmetrical */
was copied from tupleobject.c, and appears in some other places.
I sign the petition.
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index f825353..b3d6907 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -1113,6 +1113,20 @@
         #  will fail
         self.assertRaises(UnicodeEncodeError, "foo{0}".format, u'\u1000bar')
 
+    def test_raiseMemError(self):
+        # Ensure that the freelist contains a consistent object, even
+        # when a string allocation fails with a MemoryError.
+        # This used to crash the interpreter,
+        # or leak references when the number was smaller.
+        try:
+            u"a" * (sys.maxint // 2 - 100)
+        except MemoryError:
+            pass
+        try:
+            u"a" * (sys.maxint // 2 - 100)
+        except MemoryError:
+            pass
+
 def test_main():
     test_support.run_unittest(__name__)