🌐 AI搜索 & 代理 主页
Skip to content

Commit 71066ce

Browse files
committed
[squash] Test of changed size in the lookup mehtod
1 parent d7c8839 commit 71066ce

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

vm/src/dict_inner.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)