summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-06-02 12:39:45 (GMT)
committerGitHub <noreply@github.com>2020-06-02 12:39:45 (GMT)
commit297257f7bc198e2dc8e0866b539c73ff1a5cc588 (patch)
tree6a63eed632848f2d3d78d3df4d392abfe3df3846
parent59d3dce69b0a4f6ee17578ae68037cc7ae90936f (diff)
downloadcpython-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.c26
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;
}