[ python-Bugs-1017864 ] Case sensitivity bug in ConfigParser

SourceForge.net noreply at sourceforge.net
Thu Sep 23 16:19:12 CEST 2004


Bugs item #1017864, was opened at 2004-08-27 16:26
Message generated for change (Comment added) made by goodger
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1017864&group_id=5470

Category: Python Library
Group: Python 2.3
Status: Open
Resolution: None
Priority: 5
Submitted By: Dani (asqui)
Assigned to: Nobody/Anonymous (nobody)
Summary: Case sensitivity bug in ConfigParser

Initial Comment:
(Assume an instantiated ConfigParser, c, with a loaded
file)
>>> c.get("DEFAULT", "foo", False, {"foo": "Bar"})
'Bar'

>>> c.get("DEFAULT", "Foo", False, {"Foo": "Bar"})
Traceback (most recent call last):
  File "<pyshell#70>", line 1, in ?
    c.get("DEFAULT", "Foo", False, {"Foo": "Bar"})
  File "C:\Python23\lib\ConfigParser.py", line 513, in get
    raise NoOptionError(option, section)
NoOptionError: No option 'foo' in section: 'DEFAULT'


The offending code appears to be as follows (in
ConfigParser.py):
    def get(self, section, option):
        opt = self.optionxform(option)
        if section not in self._sections:
            if section != DEFAULTSECT:
                raise NoSectionError(section)
            if opt in self._defaults:
                return self._defaults[opt]
            else:
                raise NoOptionError(option, section)
        elif opt in self._sections[section]:
            return self._sections[section][opt]
        elif opt in self._defaults:
            return self._defaults[opt]
        else:
            raise NoOptionError(option, section)

It uses optionxform on the supplied option, but not on
the one in the defaults dictionary. If you're going to
impose a transform then you have to do it consistently,
imho...

>>> c.get("DEFAULT", "Foo", False, {"foo": "Bar"})
'Bar'

The supplied "Foo" gets transformed to "foo" and
matches the one in the defaults dictionary.

Seems a bit counterintuitive to expect that you supply
any defaults as pre-transformed according to your
specified optionxform.

I'm not sure if this is also a problem when reading a
file, but there seems to be a related post about this
(with no replies!) dating back to 2000:
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=8suc1f%24mf9%241%40nnrp1.deja.com

I don't have time to look into it now but I'd guess
this problem was resolved in the more obvious location
(when reading a file) but patching of the defaults
dictionary case was omitted.

----------------------------------------------------------------------

>Comment By: David Goodger (goodger)
Date: 2004-09-23 10:19

Message:
Logged In: YES 
user_id=7733

Patches added for ConfigParser.py and test_cfgparser.py.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1017864&group_id=5470


More information about the Python-bugs-list mailing list