about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
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)
+        }
     }
 }