]> granicus.if.org Git - python/commitdiff
Fixed inconsistency in string handling in the Task C implementation (GH-8717)
authorAlex Grönholm <alex.gronholm@nextday.fi>
Thu, 9 Aug 2018 20:49:49 +0000 (23:49 +0300)
committerYury Selivanov <yury@magic.io>
Thu, 9 Aug 2018 20:49:49 +0000 (16:49 -0400)
Modules/_asynciomodule.c

index 3c94848e33189a59e8869d7f824095b53874e54c..3d7ce01a680c3db6bbae010d78cab4319e38cf93 100644 (file)
@@ -1976,7 +1976,7 @@ _asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop,
 
     if (name == Py_None) {
         name = PyUnicode_FromFormat("Task-%" PRIu64, ++task_name_counter);
-    } else if (!PyUnicode_Check(name)) {
+    } else if (!PyUnicode_CheckExact(name)) {
         name = PyObject_Str(name);
     } else {
         Py_INCREF(name);
@@ -2343,12 +2343,16 @@ static PyObject *
 _asyncio_Task_set_name(TaskObj *self, PyObject *value)
 /*[clinic end generated code: output=138a8d51e32057d6 input=a8359b6e65f8fd31]*/
 {
-    PyObject *name = PyObject_Str(value);
-    if (name == NULL) {
-        return NULL;
+    if (!PyUnicode_CheckExact(value)) {
+        value = PyObject_Str(value);
+        if (value == NULL) {
+            return NULL;
+        }
+    } else {
+        Py_INCREF(value);
     }
 
-    Py_XSETREF(self->task_name, name);
+    Py_XSETREF(self->task_name, value);
     Py_RETURN_NONE;
 }