diff --git a/bson/_cbsonmodule.c b/bson/_cbsonmodule.c index cc498f448e..3e9d5ecc26 100644 --- a/bson/_cbsonmodule.c +++ b/bson/_cbsonmodule.c @@ -383,10 +383,11 @@ static int millis_from_datetime_ms(PyObject* dt, long long* out){ static PyObject* decode_datetime(PyObject* self, long long millis, const codec_options_t* options){ PyObject* naive = NULL; PyObject* replace = NULL; - PyObject* args = NULL; - PyObject* kwargs = NULL; PyObject* value = NULL; struct module_state *state = GETSTATE(self); + if (!state) { + goto invalid; + } if (options->datetime_conversion == DATETIME_MS){ return datetime_ms_from_millis(self, millis); } @@ -414,8 +415,8 @@ static PyObject* decode_datetime(PyObject* self, long long millis, const codec_o Py_DECREF(utcoffset); return 0; } - min_millis_offset = (PyDateTime_DELTA_GET_DAYS(utcoffset) * 86400 + - PyDateTime_DELTA_GET_SECONDS(utcoffset)) * 1000 + + min_millis_offset = (PyDateTime_DELTA_GET_DAYS(utcoffset) * (int64_t)86400 + + PyDateTime_DELTA_GET_SECONDS(utcoffset)) * (int64_t)1000 + (PyDateTime_DELTA_GET_MICROSECONDS(utcoffset) / 1000); } Py_DECREF(utcoffset); @@ -433,8 +434,8 @@ static PyObject* decode_datetime(PyObject* self, long long millis, const codec_o Py_DECREF(utcoffset); return 0; } - max_millis_offset = (PyDateTime_DELTA_GET_DAYS(utcoffset) * 86400 + - PyDateTime_DELTA_GET_SECONDS(utcoffset)) * 1000 + + max_millis_offset = (PyDateTime_DELTA_GET_DAYS(utcoffset) * (int64_t)86400 + + PyDateTime_DELTA_GET_SECONDS(utcoffset)) * (int64_t)1000 + (PyDateTime_DELTA_GET_MICROSECONDS(utcoffset) / 1000); } Py_DECREF(utcoffset); @@ -487,8 +488,6 @@ static PyObject* decode_datetime(PyObject* self, long long millis, const codec_o invalid: Py_XDECREF(naive); Py_XDECREF(replace); - Py_XDECREF(args); - Py_XDECREF(kwargs); return value; }