]> granicus.if.org Git - python/commitdiff
SF #665913, Fix mmap module core dump with unix
authorNeal Norwitz <nnorwitz@gmail.com>
Fri, 10 Jan 2003 20:52:16 +0000 (20:52 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Fri, 10 Jan 2003 20:52:16 +0000 (20:52 +0000)
Closing an mmap'ed file (calling munmap) twice on Solaris caused a core dump.

Will backport.

Lib/test/test_mmap.py
Modules/mmapmodule.c

index 417080f0055efe1ac05b9a264a0204571482ab4d..69d3cd5311f544165837907ee818b78c022d9ff2 100644 (file)
@@ -297,6 +297,24 @@ def test_both():
         except OSError:
             pass
 
+    # make sure a double close doesn't crash on Solaris (Bug# 665913)
+    f = open(TESTFN, 'w+')
+
+    try:    # unlink TESTFN no matter what
+        f.write(2**24 * 'a') # Arbitrary character
+        f.close()
+
+        f = open(TESTFN)
+        mf = mmap.mmap(f.fileno(), 2**24, access=mmap.ACCESS_READ)
+        mf.close()
+        mf.close()
+        f.close()
+
+    finally:
+        try:
+            os.unlink(TESTFN)
+        except OSError:
+            pass
 
 
     print ' Test passed'
index cff3c146e6c8d2b98266ab95a2987437aa2c1a72..f1df4dcab2889f2ede685e63b41f0392bebcdec5 100644 (file)
@@ -141,8 +141,10 @@ mmap_close_method(mmap_object *self, PyObject *args)
 #endif /* MS_WINDOWS */
 
 #ifdef UNIX
-       munmap(self->data, self->size);
-       self->data = NULL;
+       if (self->data != NULL) {
+               munmap(self->data, self->size);
+               self->data = NULL;
+       }
 #endif
 
        Py_INCREF (Py_None);