diff --git a/Doc/c-api/file.rst b/Doc/c-api/file.rst
index bdb8c49..93f6b64 100644
--- a/Doc/c-api/file.rst
+++ b/Doc/c-api/file.rst
@@ -55,7 +55,8 @@
 
    Create a new :ctype:`PyFileObject` from the already-open standard C file
    pointer, *fp*.  The function *close* will be called when the file should be
-   closed.  Return *NULL* on failure.
+   closed.  Return *NULL* and close the file using *close* on failure.
+   *close* is optional and can be set to *NULL*.
 
 
 .. cfunction:: FILE* PyFile_AsFile(PyObject \*p)
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index 5751901..f654c33 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -265,6 +265,14 @@
             """))
         script_helper.assert_python_ok(testfn)
 
+    def test_bug7732(self):
+        source = TESTFN + '.py'
+        os.mkdir(source)
+        try:
+            self.assertRaises(IOError, imp.find_module, TESTFN, ["."])
+        finally:
+            os.rmdir(source)
+
 
 class PycRewritingTests(unittest.TestCase):
     # Test that the `co_filename` attribute on code objects always points
diff --git a/Misc/NEWS b/Misc/NEWS
index 94782c3..b4dd215 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -9,6 +9,9 @@
 Core and Builtins
 -----------------
 
+- Issue #7732: Fix a crash on importing a module if a directory has the same
+  name than a Python module (e.g. "__init__.py"): don't close the file twice.
+
 - Issue #12973: Fix overflow checks that invoked undefined behaviour in
   int.__pow__.  These overflow checks were causing int.__pow__ to produce
   incorrect results with recent versions of Clang, as a result of the
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 974d642..edd839e 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -468,28 +468,34 @@
 PyObject *
 PyFile_FromFile(FILE *fp, char *name, char *mode, int (*close)(FILE *))
 {
-    PyFileObject *f = (PyFileObject *)PyFile_Type.tp_new(&PyFile_Type,
-                                                         NULL, NULL);
-    if (f != NULL) {
-        PyObject *o_name = PyString_FromString(name);
-        if (o_name == NULL)
-            return NULL;
-        if (fill_file_fields(f, fp, o_name, mode, close) == NULL) {
-            Py_DECREF(f);
-            f = NULL;
-        }
-        Py_DECREF(o_name);
+    PyFileObject *f;
+    PyObject *o_name;
+
+    f = (PyFileObject *)PyFile_Type.tp_new(&PyFile_Type, NULL, NULL);
+    if (f == NULL)
+        return NULL;
+    o_name = PyString_FromString(name);
+    if (o_name == NULL) {
+        if (close != NULL && fp != NULL)
+            close(fp);
+        Py_DECREF(f);
+        return NULL;
     }
-    return (PyObject *) f;
+    if (fill_file_fields(f, fp, o_name, mode, close) == NULL) {
+        Py_DECREF(f);
+        Py_DECREF(o_name);
+        return NULL;
+    }
+    Py_DECREF(o_name);
+    return (PyObject *)f;
 }
 
 PyObject *
 PyFile_FromString(char *name, char *mode)
 {
-    extern int fclose(FILE *);
     PyFileObject *f;
 
-    f = (PyFileObject *)PyFile_FromFile((FILE *)NULL, name, mode, fclose);
+    f = (PyFileObject *)PyFile_FromFile((FILE *)NULL, name, mode, NULL);
     if (f != NULL) {
         if (open_the_file(f, name, mode) == NULL) {
             Py_DECREF(f);
diff --git a/Python/import.c b/Python/import.c
index 673d1b3..c60ecfe 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2845,10 +2845,8 @@
         return NULL;
     if (fp != NULL) {
         fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
-        if (fob == NULL) {
-            fclose(fp);
+        if (fob == NULL)
             return NULL;
-        }
     }
     else {
         fob = Py_None;
