@@ -514,6 +514,7 @@ deque_inplace_concat(dequeobject *deque, PyObject *other)
514514static PyObject *
515515deque_copy (PyObject * deque )
516516{
517+ PyObject * result ;
517518 dequeobject * old_deque = (dequeobject * )deque ;
518519 if (Py_TYPE (deque ) == & deque_type ) {
519520 dequeobject * new_deque ;
@@ -538,10 +539,19 @@ deque_copy(PyObject *deque)
538539 return NULL ;
539540 }
540541 if (old_deque -> maxlen < 0 )
541- return PyObject_CallFunction ((PyObject * )(Py_TYPE (deque )), "O" , deque , NULL );
542+ result = PyObject_CallFunctionObjArgs ((PyObject * )(Py_TYPE (deque )),
543+ deque , NULL );
542544 else
543- return PyObject_CallFunction ((PyObject * )(Py_TYPE (deque )), "Oi" ,
544- deque , old_deque -> maxlen , NULL );
545+ result = PyObject_CallFunction ((PyObject * )(Py_TYPE (deque )), "Oi" ,
546+ deque , old_deque -> maxlen , NULL );
547+ if (result != NULL && !PyObject_TypeCheck (result , & deque_type )) {
548+ PyErr_Format (PyExc_TypeError ,
549+ "%.200s() must return a deque, not %.200s" ,
550+ Py_TYPE (deque )-> tp_name , Py_TYPE (result )-> tp_name );
551+ Py_DECREF (result );
552+ return NULL ;
553+ }
554+ return result ;
545555}
546556
547557PyDoc_STRVAR (copy_doc , "Return a shallow copy of a deque." );
0 commit comments