From: Brian Curtin <brian.curtin@gmail.com>
Date: Thu, 21 Oct 2010 14:11:48 +0000 (+0000)
Subject: Fix #10162: Add try/except around _winreg.OpenKey for keys that are
X-Git-Tag: v3.2a4~395
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=000f974b44c570ea042e2e61823ae243dfb9b429;p=python

Fix #10162: Add try/except around _winreg.OpenKey for keys that are
unreadable by all users, e.g., Flash, Silverlight, and Java keys were
causing errors.

We don't currently have a way to grant/deny permissions for a key
via winreg so there are no tests for this.
---

diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index d5d0fc3461..9e7cbe8a20 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -253,14 +253,16 @@ class MimeTypes:
         with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT,
                              r'MIME\Database\Content Type') as mimedb:
             for ctype in enum_types(mimedb):
-                with _winreg.OpenKey(mimedb, ctype) as key:
-                    try:
-                        suffix, datatype = _winreg.QueryValueEx(key, 'Extension')
-                    except EnvironmentError:
-                        continue
-                    if datatype != _winreg.REG_SZ:
-                        continue
-                    self.add_type(ctype, suffix, strict)
+                try:
+                    with _winreg.OpenKey(mimedb, ctype) as key:
+                        try:
+                            suffix, datatype = _winreg.QueryValueEx(key,
+                                                                'Extension')
+                except EnvironmentError:
+                    continue
+                if datatype != _winreg.REG_SZ:
+                    continue
+                self.add_type(ctype, suffix, strict)
 
 
 def guess_type(url, strict=True):
diff --git a/Misc/NEWS b/Misc/NEWS
index caf1b49a7d..a93cad94bc 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -43,6 +43,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #10163: Skip unreadable registry keys during mimetypes
+  initialization.
+
 - logging: Made StreamHandler terminator configurable.
 
 - logging: Allowed filters to be just callables.