summaryrefslogtreecommitdiffstats
path: root/Modules/_sre.c
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2014-05-14 18:48:17 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2014-05-14 18:48:17 (GMT)
commit429b59ec6990dab19d5a0e0a91f55b5f0e850cf6 (patch)
treea703239002a5ed00ceb3d4dcb21d4ad145edc727 /Modules/_sre.c
parent946cfc3e238bbd67ff436af5fd05414bbd2e5a08 (diff)
downloadcpython-429b59ec6990dab19d5a0e0a91f55b5f0e850cf6.zip
cpython-429b59ec6990dab19d5a0e0a91f55b5f0e850cf6.tar.gz
cpython-429b59ec6990dab19d5a0e0a91f55b5f0e850cf6.tar.bz2
Issue #20998: Fixed re.fullmatch() of repeated single character pattern
with ignore case. Original patch by Matthew Barnett.
Diffstat (limited to 'Modules/_sre.c')
-rw-r--r--Modules/_sre.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/Modules/_sre.c b/Modules/_sre.c
index eb1106a..300d883 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -505,14 +505,14 @@ pattern_dealloc(PatternObject* self)
}
LOCAL(Py_ssize_t)
-sre_match(SRE_STATE* state, SRE_CODE* pattern)
+sre_match(SRE_STATE* state, SRE_CODE* pattern, int match_all)
{
if (state->charsize == 1)
- return sre_ucs1_match(state, pattern);
+ return sre_ucs1_match(state, pattern, match_all);
if (state->charsize == 2)
- return sre_ucs2_match(state, pattern);
+ return sre_ucs2_match(state, pattern, match_all);
assert(state->charsize == 4);
- return sre_ucs4_match(state, pattern);
+ return sre_ucs4_match(state, pattern, match_all);
}
LOCAL(Py_ssize_t)
@@ -576,7 +576,7 @@ pattern_match(PatternObject *self, PyObject *args, PyObject *kwargs)
TRACE(("|%p|%p|MATCH\n", PatternObject_GetCode(self), state.ptr));
- status = sre_match(&state, PatternObject_GetCode(self));
+ status = sre_match(&state, PatternObject_GetCode(self), 0);
TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
if (PyErr_Occurred())
@@ -609,12 +609,11 @@ pattern_fullmatch(PatternObject* self, PyObject* args, PyObject* kw)
if (!string)
return NULL;
- state.match_all = 1;
state.ptr = state.start;
TRACE(("|%p|%p|FULLMATCH\n", PatternObject_GetCode(self), state.ptr));
- status = sre_match(&state, PatternObject_GetCode(self));
+ status = sre_match(&state, PatternObject_GetCode(self), 1);
TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
if (PyErr_Occurred())
@@ -2572,7 +2571,7 @@ scanner_match(ScannerObject* self, PyObject *unused)
state->ptr = state->start;
- status = sre_match(state, PatternObject_GetCode(self->pattern));
+ status = sre_match(state, PatternObject_GetCode(self->pattern), 0);
if (PyErr_Occurred())
return NULL;