data1 = "0123456789"
data2 = "abcdefghij"
assert len(data1) == len(data2)
+
# Test same tag
m1 = mmap.mmap(-1, len(data1), tagname="foo")
m1[:] = data1
m2[:] = data2
self.assertEquals(m1[:], data2)
self.assertEquals(m2[:], data2)
+ m2.close()
+ m1.close()
+
# Test differnt tag
m1 = mmap.mmap(-1, len(data1), tagname="foo")
m1[:] = data1
m2[:] = data2
self.assertEquals(m1[:], data1)
self.assertEquals(m2[:], data2)
+ m2.close()
+ m1.close()
- def test_tagname_crash(self):
+ def test_crasher_on_windows(self):
# Should not crash (Issue 1733986)
m = mmap.mmap(-1, 1000, tagname="foo")
try:
mmap.mmap(-1, 5000, tagname="foo")[:] # same tagname, but larger size
except:
pass
+ m.close()
+
+ # Should not crash (Issue 5385)
+ m = mmap.mmap(-1, 1000)
+ try:
+ m.resize(0)
+ except:
+ pass
+ try:
+ m[:]
+ except:
+ pass
+ m.close()
+
+ m1 = mmap.mmap(-1, 1000)
+ m2 = mmap.mmap(-1, 1000)
+ try:
+ m2.resize(5000)
+ except:
+ pass
+ try:
+ m2[:]
+ except:
+ pass
+ m2.close()
+ m1.close()
def test_main():
#ifdef MS_WINDOWS
if (m_obj->data != NULL)
UnmapViewOfFile (m_obj->data);
- if (m_obj->map_handle != INVALID_HANDLE_VALUE)
+ if (m_obj->map_handle != NULL)
CloseHandle (m_obj->map_handle);
if (m_obj->file_handle != INVALID_HANDLE_VALUE)
CloseHandle (m_obj->file_handle);
UnmapViewOfFile(self->data);
self->data = NULL;
}
- if (self->map_handle != INVALID_HANDLE_VALUE) {
+ if (self->map_handle != NULL) {
CloseHandle(self->map_handle);
- self->map_handle = INVALID_HANDLE_VALUE;
+ self->map_handle = NULL;
}
if (self->file_handle != INVALID_HANDLE_VALUE) {
CloseHandle(self->file_handle);
#ifdef MS_WINDOWS
#define CHECK_VALID(err) \
do { \
- if (self->map_handle == INVALID_HANDLE_VALUE) { \
+ if (self->map_handle == NULL) { \
PyErr_SetString(PyExc_ValueError, "mmap closed or invalid"); \
return err; \
} \
DWORD off_hi, off_lo, newSizeLow, newSizeHigh;
/* First, unmap the file view */
UnmapViewOfFile(self->data);
+ self->data = NULL;
/* Close the mapping object */
CloseHandle(self->map_handle);
+ self->map_handle = NULL;
/* Move to the desired EOF position */
#if SIZEOF_SIZE_T > 4
newSizeHigh = (DWORD)((self->offset + new_size) >> 32);
return Py_None;
} else {
dwErrCode = GetLastError();
+ CloseHandle(self->map_handle);
+ self->map_handle = NULL;
}
} else {
dwErrCode = GetLastError();
destruct the object in the face of failure */
m_obj->data = NULL;
m_obj->file_handle = INVALID_HANDLE_VALUE;
- m_obj->map_handle = INVALID_HANDLE_VALUE;
+ m_obj->map_handle = NULL;
m_obj->tagname = NULL;
m_obj->offset = offset;
m_obj->size);
if (m_obj->data != NULL)
return (PyObject *)m_obj;
- else
+ else {
dwErr = GetLastError();
+ CloseHandle(m_obj->map_handle);
+ m_obj->map_handle = NULL;
+ }
} else
dwErr = GetLastError();
Py_DECREF(m_obj);