diff --git a/source/jeger.c b/source/jeger.c index 849f09b..71f5e8c 100644 --- a/source/jeger.c +++ b/source/jeger.c @@ -490,6 +490,11 @@ regex_t * regex_compile(const char * const pattern) { char whitelist[64]; char blacklist[64]; + static const int REGEX_PREVERSABLE_FLAGS = IS_AT_THE_BEGINNING + | FORCE_START_OF_STRING + | DO_FORBID_START_OF_STRING + ; + compiler_state cs = { .flags = IS_AT_THE_BEGINNING, .state = JEGER_INIT_STATE, @@ -500,11 +505,11 @@ regex_t * regex_compile(const char * const pattern) { for (const char * s = pattern; *s != '\00';) { assert(!is_quantifier(*s) && "Pattern starts with quantifier."); // Reset the compiler - whitelist[0] = '\0'; - blacklist[0] = '\0'; - cs.flags &= (IS_AT_THE_BEGINNING | FORCE_START_OF_STRING); - cs.width = 1; - cs.match_width = 1; + whitelist[0] = '\0'; + blacklist[0] = '\0'; + cs.flags &= REGEX_PREVERSABLE_FLAGS; + cs.width = 1; + cs.match_width = 1; // Translate char switch (*s) { @@ -657,6 +662,7 @@ regex_t * regex_compile(const char * const pattern) { ++cs.state; } + // Purge SOS flag cs.flags &= (~IS_AT_THE_BEGINNING); }