]> granicus.if.org Git - onig/commitdiff
fix sch_start position
authorK.Kosako <kosako@sofnec.co.jp>
Thu, 26 Sep 2019 04:50:20 +0000 (13:50 +0900)
committerK.Kosako <kosako@sofnec.co.jp>
Thu, 26 Sep 2019 04:50:20 +0000 (13:50 +0900)
src/regexec.c

index 36d3d7f2d404201cd15285c582a4f702a2177500..2a8e6f4f0f43b1338d71699672f989df62f08d93 100644 (file)
@@ -5647,7 +5647,9 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
           (end - range) >= reg->threshold_len) {
         do {
           sch_start = s + reg->dmax;
-          if (sch_start > end) sch_start = (UChar* )end;
+          if (sch_start >= end)
+            sch_start = onigenc_get_prev_char_head(reg->enc, str, end);
+
           if (backward_search(reg, str, end, sch_start, range, adjrange,
                               &low, &high) <= 0)
             goto mismatch;
@@ -5672,11 +5674,13 @@ search_in_range(regex_t* reg, const UChar* str, const UChar* end,
             sch_start = (UChar* )end;
           else {
             sch_start += reg->dmax;
-            if (sch_start > end) sch_start = (UChar* )end;
+            if (sch_start >= end) sch_start = (UChar* )end;
             else
               sch_start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc,
                                                         start, sch_start);
           }
+          if (sch_start >= end)
+            sch_start = onigenc_get_prev_char_head(reg->enc, str, end);
         }
         if (backward_search(reg, str, end, sch_start, range, adjrange,
                             &low, &high) <= 0) goto mismatch;