diff options
Diffstat (limited to 'external/njs_regex.c')
-rw-r--r-- | external/njs_regex.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/external/njs_regex.c b/external/njs_regex.c index a118666b..cd45afc0 100644 --- a/external/njs_regex.c +++ b/external/njs_regex.c @@ -114,6 +114,11 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text) for (p = start; p < end; p++) { switch (*p) { + case '\\': + p += 1; + + break; + case '[': if (p + 1 < end && p[1] == ']') { p += 1; @@ -122,6 +127,11 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text) } else if (p + 2 < end && p[1] == '^' && p[2] == ']') { p += 2; anychars += 1; + + } else { + while (p < end && *p != ']') { + p += 1; + } } break; @@ -146,6 +156,15 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text) for (p = start; p < end; p++) { switch (*p) { + case '\\': + *dst++ = *p; + if (p + 1 < end) { + p += 1; + *dst++ = *p; + } + + continue; + case '[': if (p + 1 < end && p[1] == ']') { p += 1; @@ -156,12 +175,27 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text) p += 2; dst = njs_cpymem(dst, "[\\s\\S]", 6); continue; + + } else { + *dst++ = *p++; /* Copy '['. */ + + while (p < end && *p != ']') { + *dst++ = *p++; + } + + if (p < end) { + *dst++ = *p; /* Copy ']'. */ + } + + continue; } } *dst++ = *p; } + njs_assert(dst == text->start + text->length); + return NJS_OK; #else |