Issue #29444: Fixed out-of-bounds buffer access in the group() method of
the match object. Based on patch by WGH.
This commit is contained in:
parent
c7611362b4
commit
7e10dbbd45
|
@ -1679,6 +1679,16 @@ SUBPATTERN None
|
||||||
self.checkPatternError(r'(?<>)', 'unknown extension ?<>', 1)
|
self.checkPatternError(r'(?<>)', 'unknown extension ?<>', 1)
|
||||||
self.checkPatternError(r'(?', 'unexpected end of pattern', 2)
|
self.checkPatternError(r'(?', 'unexpected end of pattern', 2)
|
||||||
|
|
||||||
|
def test_bug_29444(self):
|
||||||
|
s = bytearray(b'abcdefgh')
|
||||||
|
m = re.search(b'[a-h]+', s)
|
||||||
|
m2 = re.search(b'[e-h]+', s)
|
||||||
|
self.assertEqual(m.group(), b'abcdefgh')
|
||||||
|
self.assertEqual(m2.group(), b'efgh')
|
||||||
|
s[:] = b'xyz'
|
||||||
|
self.assertEqual(m.group(), b'xyz')
|
||||||
|
self.assertEqual(m2.group(), b'')
|
||||||
|
|
||||||
|
|
||||||
class PatternReprTests(unittest.TestCase):
|
class PatternReprTests(unittest.TestCase):
|
||||||
def check(self, pattern, expected):
|
def check(self, pattern, expected):
|
||||||
|
|
|
@ -21,6 +21,9 @@ Extension Modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #29444: Fixed out-of-bounds buffer access in the group() method of
|
||||||
|
the match object. Based on patch by WGH.
|
||||||
|
|
||||||
- Issue #29335: Fix subprocess.Popen.wait() when the child process has
|
- Issue #29335: Fix subprocess.Popen.wait() when the child process has
|
||||||
exited to a stopped instead of terminated state (ex: when under ptrace).
|
exited to a stopped instead of terminated state (ex: when under ptrace).
|
||||||
|
|
||||||
|
|
|
@ -2015,6 +2015,7 @@ match_getslice_by_index(MatchObject* self, Py_ssize_t index, PyObject* def)
|
||||||
Py_buffer view;
|
Py_buffer view;
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
void* ptr;
|
void* ptr;
|
||||||
|
Py_ssize_t i, j;
|
||||||
|
|
||||||
if (index < 0 || index >= self->groups) {
|
if (index < 0 || index >= self->groups) {
|
||||||
/* raise IndexError if we were given a bad group number */
|
/* raise IndexError if we were given a bad group number */
|
||||||
|
@ -2036,8 +2037,12 @@ match_getslice_by_index(MatchObject* self, Py_ssize_t index, PyObject* def)
|
||||||
ptr = getstring(self->string, &length, &isbytes, &charsize, &view);
|
ptr = getstring(self->string, &length, &isbytes, &charsize, &view);
|
||||||
if (ptr == NULL)
|
if (ptr == NULL)
|
||||||
return 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)
|
if (isbytes && view.buf != NULL)
|
||||||
PyBuffer_Release(&view);
|
PyBuffer_Release(&view);
|
||||||
return result;
|
return result;
|
||||||
|
|
Loading…
Reference in New Issue