diff --git a/Python/errors.c b/Python/errors.c index d5a6fae..a55233f 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -515,10 +515,14 @@ PyObject *PyErr_SetExcFromWindowsErrWithFilename( int ierr, const char *filename) { - PyObject *name = filename ? PyUnicode_FromString(filename) : NULL; - PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc, - ierr, - name); + PyObject *name, *ret; + + if (filename) { + Py_ssize_t size = Py_SAFE_DOWNCAST(strlen(s), size_t, Py_ssize_t); + name = PyUnicode_DecodeMBCS(filename, size, "ignore"); + } else + name = NULL; + ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc, ierr, name); Py_XDECREF(name); return ret; } @@ -552,10 +556,16 @@ PyObject *PyErr_SetFromWindowsErrWithFilename( int ierr, const char *filename) { - PyObject *name = filename ? PyUnicode_FromString(filename) : NULL; - PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( - PyExc_WindowsError, - ierr, name); + PyObject *name, *result; + + if (filename) { + Py_ssize_t size = Py_SAFE_DOWNCAST(strlen(s), size_t, Py_ssize_t); + name = PyUnicode_DecodeMBCS(filename, size, "ignore"); + } else + name = NULL; + result = PyErr_SetExcFromWindowsErrWithFilenameObject( + PyExc_WindowsError, + ierr, name); Py_XDECREF(name); return result; }