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