diff options
author | bellard <6490144+bellard@users.noreply.github.com> | 2020-09-06 19:10:15 +0200 |
---|---|---|
committer | bellard <6490144+bellard@users.noreply.github.com> | 2020-09-06 19:10:15 +0200 |
commit | 7c312df422572cf867f29a1d80693e8a77f7fb2a (patch) | |
tree | e6b8443835b36b6cea904e4330ef93e4ab5ed040 /libregexp.c | |
parent | 89007660998db0ee55f0ab3b34bb1a84f86fd3c4 (diff) | |
download | quickjs-7c312df422572cf867f29a1d80693e8a77f7fb2a.tar.gz quickjs-7c312df422572cf867f29a1d80693e8a77f7fb2a.zip |
2020-09-06 release
Diffstat (limited to 'libregexp.c')
-rw-r--r-- | libregexp.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/libregexp.c b/libregexp.c index b455bf2..bbb5e9d 100644 --- a/libregexp.c +++ b/libregexp.c @@ -569,7 +569,8 @@ int lre_parse_escape(const uint8_t **pp, int allow_utf16) } } break; - case '0' ... '7': + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': c -= '0'; if (allow_utf16 == 2) { /* only accept \0 not followed by digit */ @@ -1410,7 +1411,9 @@ static int re_parse_term(REParseState *s, BOOL is_backward_dir) } } goto normal_char; - case '1' ... '9': + case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': + case '9': { const uint8_t *q = ++p; @@ -1434,7 +1437,7 @@ static int re_parse_term(REParseState *s, BOOL is_backward_dir) } goto normal_char; } - return re_parse_error(s, "back reference out of range in reguar expression"); + return re_parse_error(s, "back reference out of range in regular expression"); } emit_back_reference: last_atom_start = s->byte_code.size; @@ -2533,6 +2536,17 @@ int lre_get_flags(const uint8_t *bc_buf) return bc_buf[RE_HEADER_FLAGS]; } +/* Return NULL if no group names. Otherwise, return a pointer to + 'capture_count - 1' zero terminated UTF-8 strings. */ +const char *lre_get_groupnames(const uint8_t *bc_buf) +{ + uint32_t re_bytecode_len; + if ((lre_get_flags(bc_buf) & LRE_FLAG_NAMED_GROUPS) == 0) + return NULL; + re_bytecode_len = get_u32(bc_buf + 3); + return (const char *)(bc_buf + 7 + re_bytecode_len); +} + #ifdef TEST BOOL lre_check_stack_overflow(void *opaque, size_t alloca_size) |