@@ -538,32 +538,6 @@ deque_concat(dequeobject *deque, PyObject *other)
538538
539539static void deque_clear (dequeobject * deque );
540540
541- static PyObject *
542- deque_repeat (dequeobject * deque , Py_ssize_t n )
543- {
544- dequeobject * new_deque ;
545- PyObject * result ;
546-
547- /* XXX add a special case for when maxlen is defined */
548- if (n < 0 )
549- n = 0 ;
550- else if (n > 0 && Py_SIZE (deque ) > MAX_DEQUE_LEN / n )
551- return PyErr_NoMemory ();
552-
553- new_deque = (dequeobject * )deque_new (& deque_type , (PyObject * )NULL , (PyObject * )NULL );
554- new_deque -> maxlen = deque -> maxlen ;
555-
556- for ( ; n ; n -- ) {
557- result = deque_extend (new_deque , (PyObject * )deque );
558- if (result == NULL ) {
559- Py_DECREF (new_deque );
560- return NULL ;
561- }
562- Py_DECREF (result );
563- }
564- return (PyObject * )new_deque ;
565- }
566-
567541static PyObject *
568542deque_inplace_repeat (dequeobject * deque , Py_ssize_t n )
569543{
@@ -583,17 +557,16 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n)
583557 return (PyObject * )deque ;
584558 }
585559
586- if (size > MAX_DEQUE_LEN / n ) {
587- return PyErr_NoMemory ();
588- }
589-
590560 if (size == 1 ) {
591561 /* common case, repeating a single element */
592562 PyObject * item = deque -> leftblock -> data [deque -> leftindex ];
593563
594564 if (deque -> maxlen != -1 && n > deque -> maxlen )
595565 n = deque -> maxlen ;
596566
567+ if (n > MAX_DEQUE_LEN )
568+ return PyErr_NoMemory ();
569+
597570 for (i = 0 ; i < n - 1 ; i ++ ) {
598571 rv = deque_append (deque , item );
599572 if (rv == NULL )
@@ -604,6 +577,10 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n)
604577 return (PyObject * )deque ;
605578 }
606579
580+ if ((size_t )size > MAX_DEQUE_LEN / (size_t )n ) {
581+ return PyErr_NoMemory ();
582+ }
583+
607584 seq = PySequence_List ((PyObject * )deque );
608585 if (seq == NULL )
609586 return seq ;
@@ -621,6 +598,17 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n)
621598 return (PyObject * )deque ;
622599}
623600
601+ static PyObject *
602+ deque_repeat (dequeobject * deque , Py_ssize_t n )
603+ {
604+ dequeobject * new_deque ;
605+
606+ new_deque = (dequeobject * )deque_copy ((PyObject * ) deque );
607+ if (new_deque == NULL )
608+ return NULL ;
609+ return deque_inplace_repeat (new_deque , n );
610+ }
611+
624612/* The rotate() method is part of the public API and is used internally
625613as a primitive for other methods.
626614
0 commit comments