mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
- Issue #17782: Fix undefined behaviour on platforms where `struct timespec
`'s "tv_nsec" member is not a C long.
This commit is contained in:
parent
b38897fc91
commit
cf8a1e51ec
4 changed files with 21 additions and 4 deletions
|
@ -4775,6 +4775,8 @@ posix_utime(PyObject *self, PyObject *args, PyObject *kwargs)
|
|||
}
|
||||
|
||||
if (times && (times != Py_None)) {
|
||||
time_t a_sec, m_sec;
|
||||
long a_nsec, m_nsec;
|
||||
if (!PyTuple_CheckExact(times) || (PyTuple_Size(times) != 2)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"utime: 'times' must be either"
|
||||
|
@ -4783,11 +4785,15 @@ posix_utime(PyObject *self, PyObject *args, PyObject *kwargs)
|
|||
}
|
||||
utime.now = 0;
|
||||
if (_PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 0),
|
||||
&utime.atime_s, &utime.atime_ns) == -1 ||
|
||||
&a_sec, &a_nsec) == -1 ||
|
||||
_PyTime_ObjectToTimespec(PyTuple_GET_ITEM(times, 1),
|
||||
&utime.mtime_s, &utime.mtime_ns) == -1) {
|
||||
&m_sec, &m_nsec) == -1) {
|
||||
goto exit;
|
||||
}
|
||||
utime.atime_s = a_sec;
|
||||
utime.atime_ns = a_nsec;
|
||||
utime.mtime_s = m_sec;
|
||||
utime.mtime_ns = m_nsec;
|
||||
}
|
||||
else if (ns) {
|
||||
if (!PyTuple_CheckExact(ns) || (PyTuple_Size(ns) != 2)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue