@@ -569,7 +569,8 @@ int lre_parse_escape(const uint8_t **pp, int allow_utf16)
569569 }
570570 }
571571 break ;
572- case '0' ... '7' :
572+ case '0' : case '1' : case '2' : case '3' :
573+ case '4' : case '5' : case '6' : case '7' :
573574 c -= '0' ;
574575 if (allow_utf16 == 2 ) {
575576 /* only accept \0 not followed by digit */
@@ -1410,7 +1411,9 @@ static int re_parse_term(REParseState *s, BOOL is_backward_dir)
14101411 }
14111412 }
14121413 goto normal_char ;
1413- case '1' ... '9' :
1414+ case '1' : case '2' : case '3' : case '4' :
1415+ case '5' : case '6' : case '7' : case '8' :
1416+ case '9' :
14141417 {
14151418 const uint8_t * q = ++ p ;
14161419
@@ -1434,7 +1437,7 @@ static int re_parse_term(REParseState *s, BOOL is_backward_dir)
14341437 }
14351438 goto normal_char ;
14361439 }
1437- return re_parse_error (s , "back reference out of range in reguar expression" );
1440+ return re_parse_error (s , "back reference out of range in regular expression" );
14381441 }
14391442 emit_back_reference :
14401443 last_atom_start = s -> byte_code .size ;
@@ -2533,6 +2536,17 @@ int lre_get_flags(const uint8_t *bc_buf)
25332536 return bc_buf [RE_HEADER_FLAGS ];
25342537}
25352538
2539+ /* Return NULL if no group names. Otherwise, return a pointer to
2540+ 'capture_count - 1' zero terminated UTF-8 strings. */
2541+ const char * lre_get_groupnames (const uint8_t * bc_buf )
2542+ {
2543+ uint32_t re_bytecode_len ;
2544+ if ((lre_get_flags (bc_buf ) & LRE_FLAG_NAMED_GROUPS ) == 0 )
2545+ return NULL ;
2546+ re_bytecode_len = get_u32 (bc_buf + 3 );
2547+ return (const char * )(bc_buf + 7 + re_bytecode_len );
2548+ }
2549+
25362550#ifdef TEST
25372551
25382552BOOL lre_check_stack_overflow (void * opaque , size_t alloca_size )
@@ -2585,4 +2599,4 @@ int main(int argc, char **argv)
25852599 }
25862600 return 0 ;
25872601}
2588- #endif
2602+ #endif
0 commit comments