Issue #15900: Fixed reference leak in PyUnicode_TranslateCharmap()
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 2d74d1c..61f743e 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -8585,10 +8585,13 @@
                            PyObject *mapping,
                            const char *errors)
 {
+    PyObject *result;
     PyObject *unicode = PyUnicode_FromUnicode(p, size);
     if (!unicode)
         return NULL;
-    return _PyUnicode_TranslateCharmap(unicode, mapping, errors);
+    result = _PyUnicode_TranslateCharmap(unicode, mapping, errors);
+    Py_DECREF(unicode);
+    return result;
 }
 
 PyObject *
@@ -8600,14 +8603,10 @@
 
     str = PyUnicode_FromObject(str);
     if (str == NULL)
-        goto onError;
+        return NULL;
     result = _PyUnicode_TranslateCharmap(str, mapping, errors);
     Py_DECREF(str);
     return result;
-
-  onError:
-    Py_XDECREF(str);
-    return NULL;
 }
 
 static Py_UCS4