File tree Expand file tree Collapse file tree 2 files changed +69
-0
lines changed
Expand file tree Collapse file tree 2 files changed +69
-0
lines changed Original file line number Diff line number Diff line change @@ -114,6 +114,11 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text)
114114
115115 for (p = start ; p < end ; p ++ ) {
116116 switch (* p ) {
117+ case '\\' :
118+ p += 1 ;
119+
120+ break ;
121+
117122 case '[' :
118123 if (p + 1 < end && p [1 ] == ']' ) {
119124 p += 1 ;
@@ -122,6 +127,11 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text)
122127 } else if (p + 2 < end && p [1 ] == '^' && p [2 ] == ']' ) {
123128 p += 2 ;
124129 anychars += 1 ;
130+
131+ } else {
132+ while (p < end && * p != ']' ) {
133+ p += 1 ;
134+ }
125135 }
126136
127137 break ;
@@ -146,6 +156,15 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text)
146156 for (p = start ; p < end ; p ++ ) {
147157
148158 switch (* p ) {
159+ case '\\' :
160+ * dst ++ = * p ;
161+ if (p + 1 < end ) {
162+ p += 1 ;
163+ * dst ++ = * p ;
164+ }
165+
166+ continue ;
167+
149168 case '[' :
150169 if (p + 1 < end && p [1 ] == ']' ) {
151170 p += 1 ;
@@ -156,6 +175,14 @@ njs_regex_escape(njs_mp_t *mp, njs_str_t *text)
156175 p += 2 ;
157176 dst = njs_cpymem (dst , "[\\s\\S]" , 6 );
158177 continue ;
178+
179+ } else {
180+ * dst ++ = * p ;
181+ while (p < end && * p != ']' ) {
182+ * dst ++ = * p ++ ;
183+ }
184+
185+ continue ;
159186 }
160187 }
161188
Original file line number Diff line number Diff line change @@ -11969,6 +11969,48 @@ static njs_unit_test_t njs_test[] =
1196911969 { njs_str("/[]a/.test('a')"),
1197011970 njs_str("false") },
1197111971
11972+ { njs_str("/[#[]/.test('[')"),
11973+ njs_str("true") },
11974+
11975+ { njs_str("/[\\s[]/.test('[')"),
11976+ njs_str("true") },
11977+
11978+ { njs_str("/[#[^]/.test('[')"),
11979+ njs_str("true") },
11980+
11981+ { njs_str("/[#\\[]/.test('[')"),
11982+ njs_str("true") },
11983+
11984+ { njs_str("/[\\[^]/.test('[')"),
11985+ njs_str("true") },
11986+
11987+ { njs_str("/[^]abc]/.test('#abc]')"),
11988+ njs_str("true") },
11989+
11990+ { njs_str("/[[^]abc]/.test('[abc]')"),
11991+ njs_str("true") },
11992+
11993+ { njs_str("/[[^]abc]/.test('^abc]')"),
11994+ njs_str("true") },
11995+
11996+ { njs_str("/[]/.test('[]')"),
11997+ njs_str("false") },
11998+
11999+ { njs_str("/[[]/.test('[')"),
12000+ njs_str("true") },
12001+
12002+ { njs_str("/\\[]/.test('[]')"),
12003+ njs_str("true") },
12004+
12005+ { njs_str("/[]abc]/.test('abc]')"),
12006+ njs_str("false") },
12007+
12008+ { njs_str("/abc]/.test('abc]')"),
12009+ njs_str("true") },
12010+
12011+ { njs_str("/\\\\\\[]/.test('\\\\[]')"),
12012+ njs_str("true") },
12013+
1197212014#ifdef NJS_HAVE_PCRE2
1197312015 { njs_str("/[]*a/.test('a')"),
1197412016 njs_str("true") },
You can’t perform that action at this time.
0 commit comments