@@ -412,7 +412,7 @@ impl GraphemeCursor {
412
412
/// ```
413
413
pub fn provide_context ( & mut self , chunk : & str , chunk_start : usize ) {
414
414
use crate :: tables:: grapheme as gr;
415
- assert ! ( chunk_start + chunk. len( ) == self . pre_context_offset. unwrap( ) ) ;
415
+ assert ! ( chunk_start. saturating_add ( chunk. len( ) ) == self . pre_context_offset. unwrap( ) ) ;
416
416
self . pre_context_offset = None ;
417
417
if self . is_extended && chunk_start + chunk. len ( ) == self . offset {
418
418
let ch = chunk. chars ( ) . next_back ( ) . unwrap ( ) ;
@@ -598,15 +598,15 @@ impl GraphemeCursor {
598
598
if self . state == GraphemeState :: NotBreak {
599
599
return Ok ( false ) ;
600
600
}
601
- if ( self . offset < chunk_start || self . offset >= chunk_start + chunk. len ( ) )
602
- && ( self . offset > chunk_start + chunk. len ( ) || self . cat_after . is_none ( ) )
601
+ if ( self . offset < chunk_start || self . offset >= chunk_start. saturating_add ( chunk. len ( ) ) )
602
+ && ( self . offset > chunk_start. saturating_add ( chunk. len ( ) ) || self . cat_after . is_none ( ) )
603
603
{
604
604
return Err ( GraphemeIncomplete :: InvalidOffset ) ;
605
605
}
606
606
if let Some ( pre_context_offset) = self . pre_context_offset {
607
607
return Err ( GraphemeIncomplete :: PreContext ( pre_context_offset) ) ;
608
608
}
609
- let offset_in_chunk = self . offset - chunk_start;
609
+ let offset_in_chunk = self . offset . saturating_sub ( chunk_start) ;
610
610
if self . cat_after . is_none ( ) {
611
611
let ch = chunk[ offset_in_chunk..] . chars ( ) . next ( ) . unwrap ( ) ;
612
612
self . cat_after = Some ( self . grapheme_category ( ch) ) ;
@@ -702,7 +702,7 @@ impl GraphemeCursor {
702
702
self . cat_after = Some ( self . grapheme_category ( ch) ) ;
703
703
}
704
704
} else {
705
- self . offset += ch. len_utf8 ( ) ;
705
+ self . offset = self . offset . saturating_add ( ch. len_utf8 ( ) ) ;
706
706
self . state = GraphemeState :: Unknown ;
707
707
self . cat_before = self . cat_after . take ( ) ;
708
708
if self . cat_before . is_none ( ) {
@@ -781,7 +781,9 @@ impl GraphemeCursor {
781
781
if self . offset == chunk_start {
782
782
return Err ( GraphemeIncomplete :: PrevChunk ) ;
783
783
}
784
- let mut iter = chunk[ ..self . offset - chunk_start] . chars ( ) . rev ( ) ;
784
+ let mut iter = chunk[ ..self . offset . saturating_sub ( chunk_start) ]
785
+ . chars ( )
786
+ . rev ( ) ;
785
787
let mut ch = iter. next ( ) . unwrap ( ) ;
786
788
loop {
787
789
if self . offset == chunk_start {
0 commit comments