summaryrefslogtreecommitdiffstats
path: root/Modules/clinic
diff options
context:
space:
mode:
authorMa Lin <animalize@users.noreply.github.com>2022-04-03 16:16:20 (GMT)
committerGitHub <noreply@github.com>2022-04-03 16:16:20 (GMT)
commit6e3eee5c11b539e9aab39cff783acf57838c355a (patch)
tree29ee6720d249adfe5864ab9f09d7cb54d9f35238 /Modules/clinic
parentb82cdd1dac9a9be52051abd90a1ce69236ac41f4 (diff)
downloadcpython-6e3eee5c11b539e9aab39cff783acf57838c355a.zip
cpython-6e3eee5c11b539e9aab39cff783acf57838c355a.tar.gz
cpython-6e3eee5c11b539e9aab39cff783acf57838c355a.tar.bz2
bpo-23689: re module, fix memory leak when a match is terminated by a signal or memory allocation failure (GH-32283)
Diffstat (limited to 'Modules/clinic')
-rw-r--r--Modules/clinic/_sre.c.h27
1 files changed, 20 insertions, 7 deletions
diff --git a/Modules/clinic/_sre.c.h b/Modules/clinic/_sre.c.h
index 72d772c..34cbe21 100644
--- a/Modules/clinic/_sre.c.h
+++ b/Modules/clinic/_sre.c.h
@@ -544,7 +544,7 @@ PyDoc_STRVAR(_sre_SRE_Pattern___deepcopy____doc__,
PyDoc_STRVAR(_sre_compile__doc__,
"compile($module, /, pattern, flags, code, groups, groupindex,\n"
-" indexgroup)\n"
+" indexgroup, repeat_count)\n"
"--\n"
"\n");
@@ -554,23 +554,24 @@ PyDoc_STRVAR(_sre_compile__doc__,
static PyObject *
_sre_compile_impl(PyObject *module, PyObject *pattern, int flags,
PyObject *code, Py_ssize_t groups, PyObject *groupindex,
- PyObject *indexgroup);
+ PyObject *indexgroup, Py_ssize_t repeat_count);
static PyObject *
_sre_compile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
{
PyObject *return_value = NULL;
- static const char * const _keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL};
+ static const char * const _keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", "repeat_count", NULL};
static _PyArg_Parser _parser = {NULL, _keywords, "compile", 0};
- PyObject *argsbuf[6];
+ PyObject *argsbuf[7];
PyObject *pattern;
int flags;
PyObject *code;
Py_ssize_t groups;
PyObject *groupindex;
PyObject *indexgroup;
+ Py_ssize_t repeat_count;
- args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 6, 6, 0, argsbuf);
+ args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 7, 7, 0, argsbuf);
if (!args) {
goto exit;
}
@@ -606,7 +607,19 @@ _sre_compile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject
goto exit;
}
indexgroup = args[5];
- return_value = _sre_compile_impl(module, pattern, flags, code, groups, groupindex, indexgroup);
+ {
+ Py_ssize_t ival = -1;
+ PyObject *iobj = _PyNumber_Index(args[6]);
+ if (iobj != NULL) {
+ ival = PyLong_AsSsize_t(iobj);
+ Py_DECREF(iobj);
+ }
+ if (ival == -1 && PyErr_Occurred()) {
+ goto exit;
+ }
+ repeat_count = ival;
+ }
+ return_value = _sre_compile_impl(module, pattern, flags, code, groups, groupindex, indexgroup, repeat_count);
exit:
return return_value;
@@ -910,4 +923,4 @@ _sre_SRE_Scanner_search(ScannerObject *self, PyTypeObject *cls, PyObject *const
exit:
return return_value;
}
-/*[clinic end generated code: output=518f7bb775c1184f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=9d7510a57a157a38 input=a9049054013a1b77]*/