diff options
author | Victor Stinner <vstinner@python.org> | 2020-06-02 12:39:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-02 12:39:45 (GMT) |
commit | 297257f7bc198e2dc8e0866b539c73ff1a5cc588 (patch) | |
tree | 6a63eed632848f2d3d78d3df4d392abfe3df3846 | |
parent | 59d3dce69b0a4f6ee17578ae68037cc7ae90936f (diff) | |
download | cpython-297257f7bc198e2dc8e0866b539c73ff1a5cc588.zip cpython-297257f7bc198e2dc8e0866b539c73ff1a5cc588.tar.gz cpython-297257f7bc198e2dc8e0866b539c73ff1a5cc588.tar.bz2 |
bpo-39465: Cleanup _PyUnicode_FromId() code (GH-20595)
Work on a local variable before filling _Py_Identifier members.
-rw-r--r-- | Objects/unicodeobject.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 5116404..e69bf01 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; } |