diff --git a/Lib/platform.py b/Lib/platform.py
index fa13b5f..aba2c33 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -717,28 +717,20 @@
 
     return hex(bcd)[2:]
 
-def mac_ver(release='',versioninfo=('','',''),machine=''):
-
-    """ Get MacOS version information and return it as tuple (release,
-        versioninfo, machine) with versioninfo being a tuple (version,
-        dev_stage, non_release_version).
-
-        Entries which cannot be determined are set to the paramter values
-        which default to ''. All tuple entries are strings.
-
+def _mac_ver_gestalt():
+    """
         Thanks to Mark R. Levinson for mailing documentation links and
         code examples for this function. Documentation for the
         gestalt() API is available online at:
 
            http://www.rgaros.nl/gestalt/
-
     """
     # Check whether the version info module is available
     try:
         import gestalt
         import MacOS
     except ImportError:
-        return release,versioninfo,machine
+        return None
     # Get the infos
     sysv,sysa = _mac_ver_lookup(('sysv','sysa'))
     # Decode the infos
@@ -762,6 +754,53 @@
         machine = {0x1: '68k',
                    0x2: 'PowerPC',
                    0xa: 'i386'}.get(sysa,'')
+
+    return release,versioninfo,machine
+
+def _mac_ver_xml():
+    fn = '/System/Library/CoreServices/SystemVersion.plist'
+    if not os.path.exists(fn):
+        return None
+
+    try:
+        import plistlib
+    except ImportError:
+        return None
+
+    pl = plistlib.readPlist(fn)
+    release = pl['ProductVersion']
+    versioninfo=('', '', '')
+    machine = os.uname()[4]
+    if machine == 'ppc':
+        # for compatibility with the gestalt based code
+        machine = 'PowerPC'
+
+    return release,versioninfo,machine
+
+
+def mac_ver(release='',versioninfo=('','',''),machine=''):
+
+    """ Get MacOS version information and return it as tuple (release,
+        versioninfo, machine) with versioninfo being a tuple (version,
+        dev_stage, non_release_version).
+
+        Entries which cannot be determined are set to the paramter values
+        which default to ''. All tuple entries are strings.
+    """
+
+    # First try reading the information from an XML file which should
+    # always be present
+    info = _mac_ver_xml()
+    if info is not None:
+        return info
+
+    # If that doesn't work for some reason fall back to reading the
+    # information using gestalt calls.
+    info = _mac_ver_gestalt()
+    if info is not None:
+        return info
+
+    # If that also doesn't work return the default values
     return release,versioninfo,machine
 
 def _java_getprop(name,default):
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index 2177123..98d6911 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -120,6 +120,25 @@
             else:
                 self.assertEquals(res[2], 'PowerPC')
 
+
+    if sys.platform == 'darwin':
+        def test_mac_ver_with_fork(self):
+            # Issue7895: platform.mac_ver() crashes when using fork without exec
+            #
+            # This test checks that the fix for that issue works.
+            #
+            pid = os.fork()
+            if pid == 0:
+                # child
+                info = platform.mac_ver()
+                os._exit(0)
+
+            else:
+                # parent
+                cpid, sts = os.waitpid(pid, 0)
+                self.assertEquals(cpid, pid)
+                self.assertEquals(sts, 0)
+
     def test_dist(self):
         res = platform.dist()
 
diff --git a/Misc/NEWS b/Misc/NEWS
index fa9d522..23a52d0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -81,6 +81,8 @@
 Library
 -------
 
+- Issue #7895: platform.mac_ver() no longer crashes after calling os.fork()
+
 - Issue #5395: array.fromfile() would raise a spurious EOFError when an
   I/O error occurred.  Now an IOError is raised instead.  Patch by chuck
   (Jan Hosang).
