about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorPhlosioneer <mattmdrr2@gmail.com>2018-03-24 23:35:16 -0400
committerPhlosioneer <mattmdrr2@gmail.com>2018-03-24 23:35:16 -0400
commit8334977dcffbd538fbd1457555ea3d80cc5eb64b (patch)
treef6b68d344c2787102bbc85dd3a2034e866f723e3 /src/libcore
parent619003d1d414167630331efffe83702f74413be6 (diff)
downloadrust-8334977dcffbd538fbd1457555ea3d80cc5eb64b.tar.gz
rust-8334977dcffbd538fbd1457555ea3d80cc5eb64b.zip
Fix incorrect lower bounds
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/char.rs7
-rw-r--r--src/libcore/iter/traits.rs7
2 files changed, 12 insertions, 2 deletions
diff --git a/src/libcore/char.rs b/src/libcore/char.rs
index 2f56238a463..4420eff06ed 100644
--- a/src/libcore/char.rs
+++ b/src/libcore/char.rs
@@ -905,7 +905,12 @@ impl<I: Iterator<Item = u8>> Iterator for DecodeUtf8<I> {
 
     #[inline]
     fn size_hint(&self) -> (usize, Option<usize>) {
-        self.0.size_hint()
+        let len = self.iter.len();
+
+        // A code point is at most 4 bytes long.
+        let min_code_points = len / 4;
+
+        (min_code_points, Some(len))
     }
 }
 
diff --git a/src/libcore/iter/traits.rs b/src/libcore/iter/traits.rs
index 5e4622f804a..c3aebc4fb23 100644
--- a/src/libcore/iter/traits.rs
+++ b/src/libcore/iter/traits.rs
@@ -903,7 +903,12 @@ impl<I, T, E> Iterator for ResultShunt<I, E>
     }
 
     fn size_hint(&self) -> (usize, Option<usize>) {
-        self.iter.size_hint()
+        if self.error.is_some() {
+            (0, Some(0))
+        } else {
+            let (_, upper) = self.iter.size_hint();
+            (0, upper)
+        }
     }
 }