Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit abb3351

Browse files
committed
Properly downcast from size_t/Py_ssize_t in a few places.
1 parent 19467d2 commit abb3351

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

PC/winreg.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -765,8 +765,9 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
765765
else {
766766
if (!PyUnicode_Check(value))
767767
return FALSE;
768-
769-
*retDataSize = 2 + PyUnicode_GET_DATA_SIZE(value);
768+
*retDataSize = Py_SAFE_DOWNCAST(
769+
2 + PyUnicode_GET_DATA_SIZE(value),
770+
size_t, DWORD);
770771
}
771772
*retDataBuf = (BYTE *)PyMem_NEW(DWORD, *retDataSize);
772773
if (*retDataBuf==NULL){
@@ -798,7 +799,8 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
798799
t = PyList_GET_ITEM(value, j);
799800
if (!PyUnicode_Check(t))
800801
return FALSE;
801-
size += 2 + PyUnicode_GET_DATA_SIZE(t);
802+
size += Py_SAFE_DOWNCAST(2 + PyUnicode_GET_DATA_SIZE(t),
803+
size_t, DWORD);
802804
}
803805

804806
*retDataSize = size + 2;
@@ -848,7 +850,7 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
848850
PyErr_NoMemory();
849851
return FALSE;
850852
}
851-
*retDataSize = view.len;
853+
*retDataSize = Py_SAFE_DOWNCAST(view.len, Py_ssize_t, DWORD);
852854
memcpy(*retDataBuf, view.buf, view.len);
853855
PyBuffer_Release(&view);
854856
}

0 commit comments

Comments
 (0)