@@ -412,7 +412,7 @@ impl GraphemeCursor {
412412 /// ```
413413 pub fn provide_context ( & mut self , chunk : & str , chunk_start : usize ) {
414414 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( ) ) ;
416416 self . pre_context_offset = None ;
417417 if self . is_extended && chunk_start + chunk. len ( ) == self . offset {
418418 let ch = chunk. chars ( ) . next_back ( ) . unwrap ( ) ;
@@ -598,15 +598,15 @@ impl GraphemeCursor {
598598 if self . state == GraphemeState :: NotBreak {
599599 return Ok ( false ) ;
600600 }
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 ( ) )
603603 {
604604 return Err ( GraphemeIncomplete :: InvalidOffset ) ;
605605 }
606606 if let Some ( pre_context_offset) = self . pre_context_offset {
607607 return Err ( GraphemeIncomplete :: PreContext ( pre_context_offset) ) ;
608608 }
609- let offset_in_chunk = self . offset - chunk_start;
609+ let offset_in_chunk = self . offset . saturating_sub ( chunk_start) ;
610610 if self . cat_after . is_none ( ) {
611611 let ch = chunk[ offset_in_chunk..] . chars ( ) . next ( ) . unwrap ( ) ;
612612 self . cat_after = Some ( self . grapheme_category ( ch) ) ;
@@ -702,7 +702,7 @@ impl GraphemeCursor {
702702 self . cat_after = Some ( self . grapheme_category ( ch) ) ;
703703 }
704704 } else {
705- self . offset += ch. len_utf8 ( ) ;
705+ self . offset = self . offset . saturating_add ( ch. len_utf8 ( ) ) ;
706706 self . state = GraphemeState :: Unknown ;
707707 self . cat_before = self . cat_after . take ( ) ;
708708 if self . cat_before . is_none ( ) {
@@ -781,7 +781,9 @@ impl GraphemeCursor {
781781 if self . offset == chunk_start {
782782 return Err ( GraphemeIncomplete :: PrevChunk ) ;
783783 }
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 ( ) ;
785787 let mut ch = iter. next ( ) . unwrap ( ) ;
786788 loop {
787789 if self . offset == chunk_start {
0 commit comments