Skip to content

Commit 0ee3c86

Browse files
Raise ValueError for size() with trackfd=False.
1 parent 3a37550 commit 0ee3c86

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

Lib/test/test_mmap.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,13 @@ def test_trackfd_parameter(self, close_original_fd):
281281
if close_original_fd:
282282
f.close()
283283
self.assertEqual(len(m), size)
284-
with self.assertRaises(OSError) as err_cm:
285-
m.size()
286-
self.assertEqual(err_cm.exception.errno, errno.EBADF)
284+
if os.name == 'nt':
285+
with self.assertRaises(ValueError):
286+
m.size()
287+
else:
288+
with self.assertRaises(OSError) as err_cm:
289+
m.size()
290+
self.assertEqual(err_cm.exception.errno, errno.EBADF)
287291
with self.assertRaises(ValueError):
288292
m.resize(size * 2)
289293
with self.assertRaises(ValueError):

Modules/mmapmodule.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,7 @@ mmap_size_method(PyObject *op, PyObject *Py_UNUSED(ignored))
716716
CHECK_VALID(NULL);
717717

718718
#ifdef MS_WINDOWS
719-
if (self->file_handle != INVALID_HANDLE_VALUE || !self->trackfd) {
719+
if (self->file_handle != INVALID_HANDLE_VALUE) {
720720
DWORD low,high;
721721
long long size;
722722
low = GetFileSize(self->file_handle, &high);
@@ -731,8 +731,12 @@ mmap_size_method(PyObject *op, PyObject *Py_UNUSED(ignored))
731731
return PyLong_FromLong((long)low);
732732
size = (((long long)high)<<32) + low;
733733
return PyLong_FromLongLong(size);
734-
} else {
734+
else if (self->trackfd) {
735735
return PyLong_FromSsize_t(self->size);
736+
} else {
737+
PyErr_SetString(PyExc_ValueError,
738+
"can't get size with trackfd=False");
739+
return NULL;
736740
}
737741
#endif /* MS_WINDOWS */
738742

0 commit comments

Comments
 (0)