Kaydet (Commit) fe09fa2f authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Backport fixes for bugs #1086555 and #1085744.

üst 19c9a85f
...@@ -37,6 +37,11 @@ What's New in Python 2.4 final? ...@@ -37,6 +37,11 @@ What's New in Python 2.4 final?
Core and builtins Core and builtins
----------------- -----------------
- Bug #1086555: Fix leak in syslog module.
- Bug #1085744: Add missing overflow check to PySequence_Tuple().
Make resize schedule linear (amortized).
- Bug 875692: Improve signal handling, especially when using threads, by - Bug 875692: Improve signal handling, especially when using threads, by
forcing an early re-execution of PyEval_EvalFrame() "periodic" code when forcing an early re-execution of PyEval_EvalFrame() "periodic" code when
things_to_do is not cleared by Py_MakePendingCalls(). things_to_do is not cleared by Py_MakePendingCalls().
......
...@@ -57,17 +57,18 @@ syslog_openlog(PyObject * self, PyObject * args) ...@@ -57,17 +57,18 @@ syslog_openlog(PyObject * self, PyObject * args)
{ {
long logopt = 0; long logopt = 0;
long facility = LOG_USER; long facility = LOG_USER;
PyObject *new_S_ident_o;
Py_XDECREF(S_ident_o);
if (!PyArg_ParseTuple(args, if (!PyArg_ParseTuple(args,
"S|ll;ident string [, logoption [, facility]]", "S|ll;ident string [, logoption [, facility]]",
&S_ident_o, &logopt, &facility)) &new_S_ident_o, &logopt, &facility))
return NULL; return NULL;
/* This is needed because openlog() does NOT make a copy /* This is needed because openlog() does NOT make a copy
* and syslog() later uses it.. cannot trash it. * and syslog() later uses it.. cannot trash it.
*/ */
Py_XDECREF(S_ident_o);
S_ident_o = new_S_ident_o;
Py_INCREF(S_ident_o); Py_INCREF(S_ident_o);
openlog(PyString_AsString(S_ident_o), logopt, facility); openlog(PyString_AsString(S_ident_o), logopt, facility);
......
...@@ -1427,10 +1427,15 @@ PySequence_Tuple(PyObject *v) ...@@ -1427,10 +1427,15 @@ PySequence_Tuple(PyObject *v)
break; break;
} }
if (j >= n) { if (j >= n) {
if (n < 500) int oldn = n;
n += 10; n += 10;
else n += n >> 2;
n += 100; if (n < oldn) {
/* Check for overflow */
PyErr_NoMemory();
Py_DECREF(item);
goto Fail;
}
if (_PyTuple_Resize(&result, n) != 0) { if (_PyTuple_Resize(&result, n) != 0) {
Py_DECREF(item); Py_DECREF(item);
goto Fail; goto Fail;
......
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