Issue #10182: The re module doesn't truncate indices to 32 bits anymore.
Patch by Serhiy Storchaka.
This commit is contained in:
parent
4fc0082602
commit
b83575b0a5
|
@ -1,4 +1,5 @@
|
||||||
from test.test_support import verbose, run_unittest, import_module
|
from test.test_support import verbose, run_unittest, import_module
|
||||||
|
from test.test_support import precisionbigmemtest, _2G
|
||||||
import re
|
import re
|
||||||
from re import Scanner
|
from re import Scanner
|
||||||
import sys
|
import sys
|
||||||
|
@ -819,6 +820,21 @@ class ReTests(unittest.TestCase):
|
||||||
# Test behaviour when not given a string or pattern as parameter
|
# Test behaviour when not given a string or pattern as parameter
|
||||||
self.assertRaises(TypeError, re.compile, 0)
|
self.assertRaises(TypeError, re.compile, 0)
|
||||||
|
|
||||||
|
# The huge memuse is because of re.sub() using a list and a join()
|
||||||
|
# to create the replacement result.
|
||||||
|
@precisionbigmemtest(size=_2G, memuse=20)
|
||||||
|
def test_large(self, size):
|
||||||
|
# Issue #10182: indices were 32-bit-truncated.
|
||||||
|
s = 'a' * size
|
||||||
|
m = re.search('$', s)
|
||||||
|
self.assertIsNotNone(m)
|
||||||
|
self.assertEqual(m.start(), size)
|
||||||
|
self.assertEqual(m.end(), size)
|
||||||
|
r, n = re.subn('', '', s)
|
||||||
|
self.assertEqual(r, s)
|
||||||
|
self.assertEqual(n, size + 1)
|
||||||
|
|
||||||
|
|
||||||
def run_re_tests():
|
def run_re_tests():
|
||||||
from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR
|
from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR
|
||||||
if verbose:
|
if verbose:
|
||||||
|
|
|
@ -154,6 +154,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #10182: The re module doesn't truncate indices to 32 bits anymore.
|
||||||
|
Patch by Serhiy Storchaka.
|
||||||
|
|
||||||
- Issue #16573: In 2to3, treat enumerate() like a consuming call, so superfluous
|
- Issue #16573: In 2to3, treat enumerate() like a consuming call, so superfluous
|
||||||
list() calls aren't added to filter(), map(), and zip() which are directly
|
list() calls aren't added to filter(), map(), and zip() which are directly
|
||||||
passed enumerate().
|
passed enumerate().
|
||||||
|
|
|
@ -1636,7 +1636,7 @@ static PyObject*pattern_scanner(PatternObject*, PyObject*);
|
||||||
static PyObject *
|
static PyObject *
|
||||||
sre_codesize(PyObject* self, PyObject *unused)
|
sre_codesize(PyObject* self, PyObject *unused)
|
||||||
{
|
{
|
||||||
return Py_BuildValue("l", sizeof(SRE_CODE));
|
return PyLong_FromSize_t(sizeof(SRE_CODE));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -2448,7 +2448,7 @@ next:
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (subn)
|
if (subn)
|
||||||
return Py_BuildValue("Ni", item, n);
|
return Py_BuildValue("Nn", item, n);
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
|
|
||||||
|
@ -3389,7 +3389,7 @@ match_start(MatchObject* self, PyObject* args)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* mark is -1 if group is undefined */
|
/* mark is -1 if group is undefined */
|
||||||
return Py_BuildValue("i", self->mark[index*2]);
|
return PyLong_FromSsize_t(self->mark[index*2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
|
@ -3412,7 +3412,7 @@ match_end(MatchObject* self, PyObject* args)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* mark is -1 if group is undefined */
|
/* mark is -1 if group is undefined */
|
||||||
return Py_BuildValue("i", self->mark[index*2+1]);
|
return PyLong_FromSsize_t(self->mark[index*2+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOCAL(PyObject*)
|
LOCAL(PyObject*)
|
||||||
|
@ -3562,7 +3562,7 @@ static PyObject *
|
||||||
match_lastindex_get(MatchObject *self)
|
match_lastindex_get(MatchObject *self)
|
||||||
{
|
{
|
||||||
if (self->lastindex >= 0)
|
if (self->lastindex >= 0)
|
||||||
return Py_BuildValue("i", self->lastindex);
|
return PyLong_FromSsize_t(self->lastindex);
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue