Skip to content

Commit

Permalink
extmod/modure: Set subject begin_line so ^ doesn't match interior.
Browse files Browse the repository at this point in the history
Fixes issue #8402.

Signed-off-by: Damien George <damien@micropython.org>
  • Loading branch information
dpgeorge committed Mar 16, 2022
1 parent adfd57c commit 63f0e70
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 3 deletions.
6 changes: 3 additions & 3 deletions extmod/modure.c
Expand Up @@ -187,7 +187,7 @@ STATIC mp_obj_t ure_exec(bool is_anchored, uint n_args, const mp_obj_t *args) {
}
Subject subj;
size_t len;
subj.begin = mp_obj_str_get_data(args[1], &len);
subj.begin_line = subj.begin = mp_obj_str_get_data(args[1], &len);
subj.end = subj.begin + len;
int caps_num = (self->re.sub + 1) * 2;
mp_obj_match_t *match = m_new_obj_var(mp_obj_match_t, char *, caps_num);
Expand Down Expand Up @@ -220,7 +220,7 @@ STATIC mp_obj_t re_split(size_t n_args, const mp_obj_t *args) {
Subject subj;
size_t len;
const mp_obj_type_t *str_type = mp_obj_get_type(args[1]);
subj.begin = mp_obj_str_get_data(args[1], &len);
subj.begin_line = subj.begin = mp_obj_str_get_data(args[1], &len);
subj.end = subj.begin + len;
int caps_num = (self->re.sub + 1) * 2;

Expand Down Expand Up @@ -280,7 +280,7 @@ STATIC mp_obj_t re_sub_helper(size_t n_args, const mp_obj_t *args) {
size_t where_len;
const char *where_str = mp_obj_str_get_data(where, &where_len);
Subject subj;
subj.begin = where_str;
subj.begin_line = subj.begin = where_str;
subj.end = subj.begin + where_len;
int caps_num = (self->re.sub + 1) * 2;

Expand Down
10 changes: 10 additions & 0 deletions tests/extmod/ure_split.py
Expand Up @@ -31,3 +31,13 @@
r = re.compile(b"x")
s = r.split(b"fooxbar")
print(s)

# using ^
r = re.compile("^ab")
s = r.split("abababcabab")
print(s)

# using ^ with |
r = re.compile("^ab|cab")
s = r.split("abababcabab")
print(s)
4 changes: 4 additions & 0 deletions tests/extmod/ure_sub.py
Expand Up @@ -75,3 +75,7 @@ def A():

# Include \ in the sub replacement
print(re.sub("b", "\\\\b", "abc"))

# Using ^, make sure it doesn't repeatedly match
print(re.sub("^ab", "*", "abababcabab"))
print(re.sub("^ab|cab", "*", "abababcabab"))

0 comments on commit 63f0e70

Please sign in to comment.