mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-133572: Avoid using NTSTATUS on unsupported WinAPI partitions (GH-133573)
This commit is contained in:
parent
54a6875adb
commit
43410953c2
2 changed files with 21 additions and 6 deletions
|
@ -290,6 +290,24 @@ filter_page_exception_method(mmap_object *self, EXCEPTION_POINTERS *ptrs,
|
|||
}
|
||||
return EXCEPTION_CONTINUE_SEARCH;
|
||||
}
|
||||
|
||||
static void
|
||||
_PyErr_SetFromNTSTATUS(ULONG status)
|
||||
{
|
||||
#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM)
|
||||
PyErr_SetFromWindowsErr(LsaNtStatusToWinError((NTSTATUS)status));
|
||||
#else
|
||||
if (status & 0x80000000) {
|
||||
// HRESULT-shaped codes are supported by PyErr_SetFromWindowsErr
|
||||
PyErr_SetFromWindowsErr((int)status);
|
||||
}
|
||||
else {
|
||||
// No mapping for NTSTATUS values, so just return it for diagnostic purposes
|
||||
// If we provide it as winerror it could incorrectly change the type of the exception.
|
||||
PyErr_Format(PyExc_OSError, "Operating system error NTSTATUS=0x%08lX", status);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(MS_WINDOWS) && !defined(DONT_USE_SEH)
|
||||
|
@ -303,9 +321,7 @@ do { \
|
|||
assert(record.ExceptionCode == EXCEPTION_IN_PAGE_ERROR || \
|
||||
record.ExceptionCode == EXCEPTION_ACCESS_VIOLATION); \
|
||||
if (record.ExceptionCode == EXCEPTION_IN_PAGE_ERROR) { \
|
||||
NTSTATUS status = (NTSTATUS) record.ExceptionInformation[2]; \
|
||||
ULONG code = LsaNtStatusToWinError(status); \
|
||||
PyErr_SetFromWindowsErr(code); \
|
||||
_PyErr_SetFromNTSTATUS((ULONG)record.ExceptionInformation[2]); \
|
||||
} \
|
||||
else if (record.ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { \
|
||||
PyErr_SetFromWindowsErr(ERROR_NOACCESS); \
|
||||
|
@ -332,9 +348,7 @@ do { \
|
|||
assert(record.ExceptionCode == EXCEPTION_IN_PAGE_ERROR || \
|
||||
record.ExceptionCode == EXCEPTION_ACCESS_VIOLATION); \
|
||||
if (record.ExceptionCode == EXCEPTION_IN_PAGE_ERROR) { \
|
||||
NTSTATUS status = (NTSTATUS) record.ExceptionInformation[2]; \
|
||||
ULONG code = LsaNtStatusToWinError(status); \
|
||||
PyErr_SetFromWindowsErr(code); \
|
||||
_PyErr_SetFromNTSTATUS((ULONG)record.ExceptionInformation[2]); \
|
||||
} \
|
||||
else if (record.ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { \
|
||||
PyErr_SetFromWindowsErr(ERROR_NOACCESS); \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue