diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-03-31 19:48:16 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-31 19:48:16 (GMT) |
commit | 314d6fca36a4eaa0541218431d14804fadec6488 (patch) | |
tree | 0e36bdd257a06afec8a8d9ecd791bd12f69158ec /Modules/_datetimemodule.c | |
parent | 06bb4873d6a9ac303701d08a851d6cd9a51e02a3 (diff) | |
download | cpython-314d6fca36a4eaa0541218431d14804fadec6488.zip cpython-314d6fca36a4eaa0541218431d14804fadec6488.tar.gz cpython-314d6fca36a4eaa0541218431d14804fadec6488.tar.bz2 |
bpo-29953: Fix memory leaks in the replace() method of datetime and time (#927)
objects when pass out of bound fold argument.
Diffstat (limited to 'Modules/_datetimemodule.c')
-rw-r--r-- | Modules/_datetimemodule.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 3661c78..3439040 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3937,16 +3937,16 @@ time_replace(PyDateTime_Time *self, PyObject *args, PyObject *kw) time_kws, &hh, &mm, &ss, &us, &tzinfo, &fold)) return NULL; + if (fold != 0 && fold != 1) { + PyErr_SetString(PyExc_ValueError, + "fold must be either 0 or 1"); + return NULL; + } tuple = Py_BuildValue("iiiiO", hh, mm, ss, us, tzinfo); if (tuple == NULL) return NULL; clone = time_new(Py_TYPE(self), tuple, NULL); if (clone != NULL) { - if (fold != 0 && fold != 1) { - PyErr_SetString(PyExc_ValueError, - "fold must be either 0 or 1"); - return NULL; - } TIME_SET_FOLD(clone, fold); } Py_DECREF(tuple); @@ -5030,17 +5030,16 @@ datetime_replace(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) &y, &m, &d, &hh, &mm, &ss, &us, &tzinfo, &fold)) return NULL; + if (fold != 0 && fold != 1) { + PyErr_SetString(PyExc_ValueError, + "fold must be either 0 or 1"); + return NULL; + } tuple = Py_BuildValue("iiiiiiiO", y, m, d, hh, mm, ss, us, tzinfo); if (tuple == NULL) return NULL; clone = datetime_new(Py_TYPE(self), tuple, NULL); - if (clone != NULL) { - if (fold != 0 && fold != 1) { - PyErr_SetString(PyExc_ValueError, - "fold must be either 0 or 1"); - return NULL; - } DATE_SET_FOLD(clone, fold); } Py_DECREF(tuple); |