]> granicus.if.org Git - onig/commitdiff
check next opcode after empty check if ONIG_DEBUG is enabled.
authorK.Kosako <kosako@sofnec.co.jp>
Thu, 7 Feb 2019 04:20:12 +0000 (13:20 +0900)
committerK.Kosako <kosako@sofnec.co.jp>
Thu, 28 Feb 2019 05:28:18 +0000 (14:28 +0900)
src/regexec.c

index be3c3874cc17dd9b4a5c1b2e0aff12a556f51ea1..b5c2b8dc7cc86de15e3f7801f2d16e2f9730b78d 100644 (file)
@@ -3642,7 +3642,24 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           fprintf(stderr, "EMPTY_CHECK_END: skip  id:%d, s:%p\n", (int )mem, s);
 #endif
         empty_check_found:
+          /* empty loop founded, skip next instruction */
+#if defined(ONIG_DEBUG) && !defined(USE_DIRECT_THREADED_CODE)
+          switch (p->opcode) {
+          case OP_JUMP:
+          case OP_PUSH:
+          case OP_REPEAT_INC:
+          case OP_REPEAT_INC_NG:
+          case OP_REPEAT_INC_SG:
+          case OP_REPEAT_INC_NG_SG:
+            INC_OP;
+            break;
+          default:
+            goto unexpected_bytecode_error;
+            break;
+          }
+#else
           INC_OP;
+#endif
         }
       }
       JUMP_OUT;
@@ -4079,6 +4096,12 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   STACK_SAVE;
   return ONIGERR_UNDEFINED_BYTECODE;
 
+#if defined(ONIG_DEBUG) && !defined(USE_DIRECT_THREADED_CODE)
+ unexpected_bytecode_error:
+  STACK_SAVE;
+  return ONIGERR_UNEXPECTED_BYTECODE;
+#endif
+
 #ifdef USE_RETRY_LIMIT_IN_MATCH
  retry_limit_in_match_over:
   STACK_SAVE;