New submission from Dave Chambers <dlchamb...@aol.com>:

The current mimetypes.read_windows_registry() enums the values under 
HKCR\MIME\Database\Content Type
However, this is the key for mimetype to extension lookups, NOT for extension 
to mimetype lookups.
As a result, when >1 MIME types are mapped to a particular extension, the 
last-found entry is used.
For example, both "image/png" and "image/x-png" map to the ".png" file 
extension.
Unfortunately, what happens is this code finds "image/png", then later finds 
"image/x-png" and this steals the ".png" extension.


The solution is to use the correct regkey, which is the HKCR root.
This is the correct location for extension-to-mimetype lookups.
What we should do is enum the HKCR root, find all subkeys that start with a dot 
(i.e. file extensions), then inspect those for a 'Content Type' value.


The attached ZIP contains:
mimetype_flaw_demo.py  - this demonstrates the error (due to wrong regkey) and 
my fix (uses the correct regkey)
mimetypes_fixed.py   -   My suggested fix to the standard mimetypes.py module.

----------
components: Windows
files: mimetype_flaw_demo.zip
messages: 164167
nosy: dlchambers
priority: normal
severity: normal
status: open
title: mimetypes.read_windows_registry() uses the wrong regkey, creates wrong 
mappings
type: behavior
versions: Python 2.7
Added file: http://bugs.python.org/file26180/mimetype_flaw_demo.zip

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue15207>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to