merge 3.2
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 1eb24dd..fd9175d 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -12591,9 +12591,13 @@
         y_data = PyUnicode_DATA(y);
         for (i = 0; i < PyUnicode_GET_LENGTH(x); i++) {
             key = PyLong_FromLong(PyUnicode_READ(x_kind, x_data, i));
-            value = PyLong_FromLong(PyUnicode_READ(y_kind, y_data, i));
-            if (!key || !value)
+            if (!key)
                 goto err;
+            value = PyLong_FromLong(PyUnicode_READ(y_kind, y_data, i));
+            if (!value) {
+                Py_DECREF(key);
+                goto err;
+            }
             res = PyDict_SetItem(new, key, value);
             Py_DECREF(key);
             Py_DECREF(value);