diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-02-04 20:57:44 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2017-02-04 20:57:44 (GMT) |
commit | ef5176769d5e54374d84b44f8be2c94f6ab909fa (patch) | |
tree | 3ae37f17b11e55714e690eea256dfb7a5fddf26b /Modules/_sre.c | |
parent | 26581785f3625e05d888f120dac9087002d5602e (diff) | |
parent | 86e42376c2f41e6601b1844fb127f2f2e7b5349a (diff) | |
download | cpython-ef5176769d5e54374d84b44f8be2c94f6ab909fa.zip cpython-ef5176769d5e54374d84b44f8be2c94f6ab909fa.tar.gz cpython-ef5176769d5e54374d84b44f8be2c94f6ab909fa.tar.bz2 |
Issue #29444: Fixed out-of-bounds buffer access in the group() method of
the match object. Based on patch by WGH.
Diffstat (limited to 'Modules/_sre.c')
-rw-r--r-- | Modules/_sre.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Modules/_sre.c b/Modules/_sre.c index 061af39..2a2fd27 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1945,6 +1945,7 @@ match_getslice_by_index(MatchObject* self, Py_ssize_t index, PyObject* def) Py_buffer view; PyObject *result; void* ptr; + Py_ssize_t i, j; if (index < 0 || index >= self->groups) { /* raise IndexError if we were given a bad group number */ @@ -1966,8 +1967,12 @@ match_getslice_by_index(MatchObject* self, Py_ssize_t index, PyObject* def) ptr = getstring(self->string, &length, &isbytes, &charsize, &view); if (ptr == NULL) return NULL; - result = getslice(isbytes, ptr, - self->string, self->mark[index], self->mark[index+1]); + + i = self->mark[index]; + j = self->mark[index+1]; + i = Py_MIN(i, length); + j = Py_MIN(j, length); + result = getslice(isbytes, ptr, self->string, i, j); if (isbytes && view.buf != NULL) PyBuffer_Release(&view); return result; |