@@ -478,6 +478,7 @@ deque_inplace_concat(dequeobject *deque, PyObject *other)
478478static PyObject *
479479deque_copy (PyObject * deque , PyObject * Py_UNUSED (ignored ))
480480{
481+ PyObject * result ;
481482 dequeobject * old_deque = (dequeobject * )deque ;
482483 if (Py_TYPE (deque ) == & deque_type ) {
483484 dequeobject * new_deque ;
@@ -502,11 +503,19 @@ deque_copy(PyObject *deque, PyObject *Py_UNUSED(ignored))
502503 return NULL ;
503504 }
504505 if (old_deque -> maxlen < 0 )
505- return PyObject_CallFunctionObjArgs ((PyObject * )(Py_TYPE (deque )),
506- deque , NULL );
506+ result = PyObject_CallFunctionObjArgs ((PyObject * )(Py_TYPE (deque )),
507+ deque , NULL );
507508 else
508- return PyObject_CallFunction ((PyObject * )(Py_TYPE (deque )), "Oi" ,
509- deque , old_deque -> maxlen , NULL );
509+ result = PyObject_CallFunction ((PyObject * )(Py_TYPE (deque )), "Oi" ,
510+ deque , old_deque -> maxlen , NULL );
511+ if (result != NULL && !PyObject_TypeCheck (result , & deque_type )) {
512+ PyErr_Format (PyExc_TypeError ,
513+ "%.200s() must return a deque, not %.200s" ,
514+ Py_TYPE (deque )-> tp_name , Py_TYPE (result )-> tp_name );
515+ Py_DECREF (result );
516+ return NULL ;
517+ }
518+ return result ;
510519}
511520
512521PyDoc_STRVAR (copy_doc , "Return a shallow copy of a deque." );
0 commit comments