mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-41094: Fix decoding errors with audit when open files. (GH-21095)
(cherry picked from commit 6c6810d989
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
6c56356109
commit
7329c8c7a2
5 changed files with 35 additions and 14 deletions
|
@ -1274,7 +1274,12 @@ _Py_open_impl(const char *pathname, int flags, int gil_held)
|
|||
#endif
|
||||
|
||||
if (gil_held) {
|
||||
if (PySys_Audit("open", "sOi", pathname, Py_None, flags) < 0) {
|
||||
PyObject *pathname_obj = PyUnicode_DecodeFSDefault(pathname);
|
||||
if (pathname_obj == NULL) {
|
||||
return -1;
|
||||
}
|
||||
if (PySys_Audit("open", "OOi", pathname_obj, Py_None, flags) < 0) {
|
||||
Py_DECREF(pathname_obj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1284,12 +1289,16 @@ _Py_open_impl(const char *pathname, int flags, int gil_held)
|
|||
Py_END_ALLOW_THREADS
|
||||
} while (fd < 0
|
||||
&& errno == EINTR && !(async_err = PyErr_CheckSignals()));
|
||||
if (async_err)
|
||||
return -1;
|
||||
if (fd < 0) {
|
||||
PyErr_SetFromErrnoWithFilename(PyExc_OSError, pathname);
|
||||
if (async_err) {
|
||||
Py_DECREF(pathname_obj);
|
||||
return -1;
|
||||
}
|
||||
if (fd < 0) {
|
||||
PyErr_SetFromErrnoWithFilenameObjects(PyExc_OSError, pathname_obj, NULL);
|
||||
Py_DECREF(pathname_obj);
|
||||
return -1;
|
||||
}
|
||||
Py_DECREF(pathname_obj);
|
||||
}
|
||||
else {
|
||||
fd = open(pathname, flags);
|
||||
|
@ -1385,9 +1394,15 @@ _Py_wfopen(const wchar_t *path, const wchar_t *mode)
|
|||
FILE*
|
||||
_Py_fopen(const char *pathname, const char *mode)
|
||||
{
|
||||
if (PySys_Audit("open", "ssi", pathname, mode, 0) < 0) {
|
||||
PyObject *pathname_obj = PyUnicode_DecodeFSDefault(pathname);
|
||||
if (pathname_obj == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
if (PySys_Audit("open", "Osi", pathname_obj, mode, 0) < 0) {
|
||||
Py_DECREF(pathname_obj);
|
||||
return NULL;
|
||||
}
|
||||
Py_DECREF(pathname_obj);
|
||||
|
||||
FILE *f = fopen(pathname, mode);
|
||||
if (f == NULL)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue