From: Victor Stinner Date: Tue, 2 Jun 2020 12:39:45 +0000 (+0200) Subject: bpo-39465: Cleanup _PyUnicode_FromId() code (GH-20595) X-Git-Tag: v3.10.0a1~740 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=297257f7bc198e2dc8e0866b539c73ff1a5cc588;p=thirdparty%2FPython%2Fcpython.git bpo-39465: Cleanup _PyUnicode_FromId() code (GH-20595) Work on a local variable before filling _Py_Identifier members. --- diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 511640438d01..e69bf01251ce 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -2275,17 +2275,23 @@ PyUnicode_FromString(const char *u) PyObject * _PyUnicode_FromId(_Py_Identifier *id) { - if (!id->object) { - id->object = PyUnicode_DecodeUTF8Stateful(id->string, - strlen(id->string), - NULL, NULL); - if (!id->object) - return NULL; - PyUnicode_InternInPlace(&id->object); - assert(!id->next); - id->next = static_strings; - static_strings = id; + if (id->object) { + return id->object; + } + + PyObject *obj; + obj = PyUnicode_DecodeUTF8Stateful(id->string, + strlen(id->string), + NULL, NULL); + if (!obj) { + return NULL; } + PyUnicode_InternInPlace(&obj); + + assert(!id->next); + id->object = obj; + id->next = static_strings; + static_strings = id; return id->object; }