File tree Expand file tree Collapse file tree 1 file changed +10
-1
lines changed
Expand file tree Collapse file tree 1 file changed +10
-1
lines changed Original file line number Diff line number Diff line change @@ -574,6 +574,7 @@ impl<T: Clone> Dict<T> {
574574 ) -> PyResult < LookupResult > {
575575 let mut idxs = None ;
576576 let mut free_slot = None ;
577+ let original_size = self . size ( ) ;
577578 let ret = ' outer: loop {
578579 let ( entry_key, ret) = {
579580 let inner = lock. take ( ) . unwrap_or_else ( || self . read ( ) ) ;
@@ -585,7 +586,7 @@ impl<T: Clone> Dict<T> {
585586 let index_entry = match inner. indices . get ( index_index) {
586587 None => {
587588 // Dictionary was modified under our hands, see TestMethodsMutating.
588- continue ' outer ;
589+ return Err ( vm . new_runtime_error ( "set changed size during iteration" ) ) ;
589590 }
590591 Some ( v) => * v,
591592 } ;
@@ -600,6 +601,11 @@ impl<T: Clone> Dict<T> {
600601 Some ( free) => ( IndexEntry :: DUMMY , free) ,
601602 None => ( IndexEntry :: FREE , index_index) ,
602603 } ;
604+ if self . has_changed_size ( & original_size) {
605+ return Err (
606+ vm. new_runtime_error ( "set changed size during iteration" )
607+ ) ;
608+ }
603609 return Ok ( idxs) ;
604610 }
605611 idx => {
@@ -631,6 +637,9 @@ impl<T: Clone> Dict<T> {
631637
632638 // warn!("Perturb value: {}", i);
633639 } ;
640+ if self . has_changed_size ( & original_size) {
641+ return Err ( vm. new_runtime_error ( "set changed size during iteration" ) ) ;
642+ }
634643 Ok ( ret)
635644 }
636645
You can’t perform that action at this time.
0 commit comments