]> granicus.if.org Git - icu/commitdiff
ICU-11786 Terminate internalNext/Prev when we reach text limit, not just at UBRK_DONE...
authorPeter Edberg <pedberg@unicode.org>
Wed, 9 Sep 2015 03:55:20 +0000 (03:55 +0000)
committerPeter Edberg <pedberg@unicode.org>
Wed, 9 Sep 2015 03:55:20 +0000 (03:55 +0000)
X-SVN-Rev: 37913

icu4c/source/common/filteredbrk.cpp

index 35c087153494a8c67e586ea2ca3ed0c86c11d660..391f52b5fd4ff4b74d1570ab44e4e47f08e243f8 100644 (file)
@@ -342,9 +342,10 @@ SimpleFilteredSentenceBreakIterator::internalNext(int32_t n) {
   // refresh text
   resetState(status);
   if(U_FAILURE(status)) return UBRK_DONE; // bail out
+  int64_t utextLen = utext_nativeLength(fText.getAlias());
 
   //if(debug2) u_printf("str, native len=%d\n", utext_nativeLength(fText.getAlias()));
-  while (n != UBRK_DONE) { // outer loop runs once per underlying break (from fDelegate).
+  while (n != UBRK_DONE && n != utextLen) { // outer loop runs once per underlying break (from fDelegate).
     SimpleFilteredSentenceBreakIterator::EFBMatchResult m = breakExceptionAt(n);
 
     switch(m) {
@@ -373,7 +374,7 @@ SimpleFilteredSentenceBreakIterator::internalPrev(int32_t n) {
   if(U_FAILURE(status)) return UBRK_DONE; // bail out
 
   //if(debug2) u_printf("str, native len=%d\n", utext_nativeLength(fText.getAlias()));
-  while (n != UBRK_DONE) { // outer loop runs once per underlying break (from fDelegate).
+  while (n != UBRK_DONE && n != 0) { // outer loop runs once per underlying break (from fDelegate).
     SimpleFilteredSentenceBreakIterator::EFBMatchResult m = breakExceptionAt(n);
 
     switch(m) {