about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGiacomo Stevanato <giaco.stevanato@gmail.com>2021-02-19 12:16:12 +0100
committerGiacomo Stevanato <giaco.stevanato@gmail.com>2021-03-03 21:16:08 +0100
commit8b9ac4d4155c74db5b317046033ab9c05a09e351 (patch)
treea96c02aaef17b61c5d5baa527a677f236c193fa6
parent66a260617a88ed1ad55a46f03c5a90d5ad3004d3 (diff)
downloadrust-8b9ac4d4155c74db5b317046033ab9c05a09e351.tar.gz
rust-8b9ac4d4155c74db5b317046033ab9c05a09e351.zip
Add test for underflow in specialized Zip's size_hint
-rw-r--r--library/core/tests/iter/adapters/zip.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/library/core/tests/iter/adapters/zip.rs b/library/core/tests/iter/adapters/zip.rs
index 1fce0951e36..a5977103929 100644
--- a/library/core/tests/iter/adapters/zip.rs
+++ b/library/core/tests/iter/adapters/zip.rs
@@ -245,3 +245,23 @@ fn test_double_ended_zip() {
     assert_eq!(it.next_back(), Some((3, 3)));
     assert_eq!(it.next(), None);
 }
+
+#[test]
+fn test_issue_82282() {
+    fn overflowed_zip(arr: &[i32]) -> impl Iterator<Item = (i32, &())> {
+        static UNIT_EMPTY_ARR: [(); 0] = [];
+
+        let mapped = arr.into_iter().map(|i| *i);
+        let mut zipped = mapped.zip(UNIT_EMPTY_ARR.iter());
+        zipped.next();
+        zipped
+    }
+
+    let arr = [1, 2, 3];
+    let zip = overflowed_zip(&arr).zip(overflowed_zip(&arr));
+
+    assert_eq!(zip.size_hint(), (0, Some(0)));
+    for _ in zip {
+        panic!();
+    }
+}