File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 9898{
9999 fn mul ( & self , vm : & VirtualMachine , n : isize ) -> PyResult < Vec < T > > {
100100 let n = vm. check_repeat_or_overflow_error ( self . as_ref ( ) . len ( ) , n) ?;
101+ if self . as_ref ( ) . is_empty ( ) {
102+ return Ok ( Vec :: new ( ) ) ;
103+ }
101104
102105 if n > 1 && core:: mem:: size_of_val ( self . as_ref ( ) ) >= MAX_MEMORY_SIZE / n {
103106 return Err ( vm. no_memory_error ( ) ) ;
@@ -134,7 +137,7 @@ where
134137
135138 if n == 0 {
136139 self . as_vec_mut ( ) . clear ( ) ;
137- } else if n != 1 {
140+ } else if n != 1 && ! self . as_ref ( ) . is_empty ( ) {
138141 let len = self . as_ref ( ) . len ( ) ;
139142 let v = self . as_vec_mut ( ) ;
140143 v. try_reserve_exact ( len * ( n - 1 ) )
Original file line number Diff line number Diff line change @@ -882,3 +882,8 @@ class B(bytearray):
882882 assert_raises (
883883 IndexError , lambda : a [- sys .maxsize - i ], _msg = "bytearray index out of range"
884884 )
885+
886+ # Repeating an empty bytearray by a huge count returns at once
887+ empty = bytearray ()
888+ empty *= sys .maxsize
889+ assert empty == bytearray ()
Original file line number Diff line number Diff line change @@ -1062,3 +1062,9 @@ def __iter__(self):
10621062# A report the list can act on is acted on.
10631063assert list (Reports (3 )) == [1 , 2 , 3 ]
10641064assert list (Reports (0 )) == [1 , 2 , 3 ]
1065+
1066+ # Repeating an empty list by a huge count returns at once
1067+ empty = []
1068+ empty *= sys .maxsize
1069+ assert empty == []
1070+ assert [] * sys .maxsize == []
Original file line number Diff line number Diff line change 1+ import sys
12from array import array
23from pickle import dumps , loads
34
@@ -176,3 +177,10 @@ def test_frombytes_of_itself():
176177 wide = array ("i" , [1 , 2 , 3 ])
177178 with assert_raises (TypeError ):
178179 wide .frombytes (memoryview (wide ))
180+
181+
182+ # Repeating an empty array by a huge count returns at once
183+ empty = array ("i" )
184+ assert empty * sys .maxsize == array ("i" )
185+ empty *= sys .maxsize
186+ assert empty == array ("i" )
You can’t perform that action at this time.
0 commit comments