Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit d858720

Browse filesBrowse files
add structured exception handling to mmap_read_method
1 parent 7e87d30 commit d858720
Copy full SHA for d858720

File tree

1 file changed

+26
-0
lines changed
Filter options

1 file changed

+26
-0
lines changed

‎Modules/mmapmodule.c

Copy file name to clipboardExpand all lines: Modules/mmapmodule.c
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,17 @@ mmap_read_line_method(mmap_object *self,
291291
return result;
292292
}
293293

294+
#if defined(MS_WIN32) && !defined(DONT_USE_SEH)
295+
static DWORD HandlePageException(EXCEPTION_POINTERS *ptrs, EXCEPTION_RECORD *record)
296+
{
297+
*record = *ptrs->ExceptionRecord;
298+
if (ptrs->ExceptionRecord->ExceptionCode == EXCEPTION_IN_PAGE_ERROR) {
299+
return EXCEPTION_EXECUTE_HANDLER;
300+
}
301+
return EXCEPTION_CONTINUE_SEARCH;
302+
}
303+
#endif
304+
294305
static PyObject *
295306
mmap_read_method(mmap_object *self,
296307
PyObject *args)
@@ -307,8 +318,23 @@ mmap_read_method(mmap_object *self,
307318
remaining = (self->pos < self->size) ? self->size - self->pos : 0;
308319
if (num_bytes < 0 || num_bytes > remaining)
309320
num_bytes = remaining;
321+
322+
#ifdef DONT_USE_SEH
310323
result = PyBytes_FromStringAndSize(&self->data[self->pos], num_bytes);
311324
self->pos += num_bytes;
325+
#else
326+
EXCEPTION_RECORD record;
327+
__try {
328+
result = PyBytes_FromStringAndSize(&self->data[self->pos], num_bytes);
329+
self->pos += num_bytes;
330+
}
331+
__except (HandlePageException(GetExceptionInformation(), &record)) {
332+
NTSTATUS code = record.ExceptionInformation[2];
333+
PyErr_SetFromWindowsErr(code);
334+
result = NULL;
335+
}
336+
#endif
337+
312338
return result;
313339
}
314340

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.