summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--extmod/modure.c4
-rw-r--r--tests/extmod/ure1.py5
2 files changed, 9 insertions, 0 deletions
diff --git a/extmod/modure.c b/extmod/modure.c
index f54b060c8f..f25c1a8d90 100644
--- a/extmod/modure.c
+++ b/extmod/modure.c
@@ -185,6 +185,9 @@ STATIC const mp_obj_type_t re_type = {
STATIC mp_obj_t mod_re_compile(uint n_args, const mp_obj_t *args) {
const char *re_str = mp_obj_str_get_str(args[0]);
int size = re1_5_sizecode(re_str);
+ if (size == -1) {
+ goto error;
+ }
mp_obj_re_t *o = m_new_obj_var(mp_obj_re_t, char, size);
o->base.type = &re_type;
int flags = 0;
@@ -193,6 +196,7 @@ STATIC mp_obj_t mod_re_compile(uint n_args, const mp_obj_t *args) {
}
int error = re1_5_compilecode(&o->re, re_str);
if (error != 0) {
+error:
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Error in regex"));
}
if (flags & FLAG_DEBUG) {
diff --git a/tests/extmod/ure1.py b/tests/extmod/ure1.py
index 39e84d51ea..aeadf4e5c5 100644
--- a/tests/extmod/ure1.py
+++ b/tests/extmod/ure1.py
@@ -62,3 +62,8 @@ m = re.match('a*?', 'ab'); print(m.group(0))
m = re.match('^ab$', 'ab'); print(m.group(0))
m = re.match('a|b', 'b'); print(m.group(0))
m = re.match('a|b|c', 'c'); print(m.group(0))
+
+try:
+ re.compile("*")
+except:
+ print("Caught invalid regex")