Commit 82feb1f3 authored by Antoine Pitrou's avatar Antoine Pitrou

Merged revisions 77499 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r77499 | antoine.pitrou | 2010-01-14 18:25:24 +0100 (jeu., 14 janv. 2010) | 4 lines

  Issue #3299: Fix possible crash in the _sre module when given bad
  argument values in debug mode.  Patch by Victor Stinner.
........
parent 6d4b00cc
...@@ -717,6 +717,12 @@ class ReTests(unittest.TestCase): ...@@ -717,6 +717,12 @@ class ReTests(unittest.TestCase):
self.assertRaises(ValueError, re.compile, '(?a)\w', re.UNICODE) self.assertRaises(ValueError, re.compile, '(?a)\w', re.UNICODE)
self.assertRaises(ValueError, re.compile, '(?au)\w') self.assertRaises(ValueError, re.compile, '(?au)\w')
def test_dealloc(self):
# issue 3299: check for segfault in debug build
import _sre
long_overflow = sys.maxsize + 2
self.assertRaises(TypeError, re.finditer, "a", {})
self.assertRaises(OverflowError, _sre.compile, "abc", 0, [long_overflow])
def run_re_tests(): def run_re_tests():
from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR
......
...@@ -213,6 +213,9 @@ C-API ...@@ -213,6 +213,9 @@ C-API
Library Library
------- -------
- Issue #3299: Fix possible crash in the _sre module when given bad
argument values in debug mode. Patch by Victor Stinner.
- Issue #2846: Add support for gzip.GzipFile reading zero-padded files. - Issue #2846: Add support for gzip.GzipFile reading zero-padded files.
Patch by Brian Curtin. Patch by Brian Curtin.
......
...@@ -2674,6 +2674,10 @@ _compile(PyObject* self_, PyObject* args) ...@@ -2674,6 +2674,10 @@ _compile(PyObject* self_, PyObject* args)
self = PyObject_NEW_VAR(PatternObject, &Pattern_Type, n); self = PyObject_NEW_VAR(PatternObject, &Pattern_Type, n);
if (!self) if (!self)
return NULL; return NULL;
self->weakreflist = NULL;
self->pattern = NULL;
self->groupindex = NULL;
self->indexgroup = NULL;
self->codesize = n; self->codesize = n;
...@@ -2689,7 +2693,7 @@ _compile(PyObject* self_, PyObject* args) ...@@ -2689,7 +2693,7 @@ _compile(PyObject* self_, PyObject* args)
} }
if (PyErr_Occurred()) { if (PyErr_Occurred()) {
PyObject_DEL(self); Py_DECREF(self);
return NULL; return NULL;
} }
...@@ -3730,7 +3734,7 @@ static void ...@@ -3730,7 +3734,7 @@ static void
scanner_dealloc(ScannerObject* self) scanner_dealloc(ScannerObject* self)
{ {
state_fini(&self->state); state_fini(&self->state);
Py_DECREF(self->pattern); Py_XDECREF(self->pattern);
PyObject_DEL(self); PyObject_DEL(self);
} }
...@@ -3860,10 +3864,11 @@ pattern_scanner(PatternObject* pattern, PyObject* args) ...@@ -3860,10 +3864,11 @@ pattern_scanner(PatternObject* pattern, PyObject* args)
self = PyObject_NEW(ScannerObject, &Scanner_Type); self = PyObject_NEW(ScannerObject, &Scanner_Type);
if (!self) if (!self)
return NULL; return NULL;
self->pattern = NULL;
string = state_init(&self->state, pattern, string, start, end); string = state_init(&self->state, pattern, string, start, end);
if (!string) { if (!string) {
PyObject_DEL(self); Py_DECREF(self);
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment