summaryrefslogtreecommitdiff
path: root/libregexp.c
diff options
context:
space:
mode:
authorbellard <6490144+bellard@users.noreply.github.com>2020-09-06 19:10:15 +0200
committerbellard <6490144+bellard@users.noreply.github.com>2020-09-06 19:10:15 +0200
commit7c312df422572cf867f29a1d80693e8a77f7fb2a (patch)
treee6b8443835b36b6cea904e4330ef93e4ab5ed040 /libregexp.c
parent89007660998db0ee55f0ab3b34bb1a84f86fd3c4 (diff)
downloadquickjs-7c312df422572cf867f29a1d80693e8a77f7fb2a.tar.gz
quickjs-7c312df422572cf867f29a1d80693e8a77f7fb2a.zip
2020-09-06 release
Diffstat (limited to 'libregexp.c')
-rw-r--r--libregexp.c20
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)