diff options
author | Cheryl Sabella <cheryl.sabella@gmail.com> | 2018-06-12 20:37:51 (GMT) |
---|---|---|
committer | Ćukasz Langa <lukasz@langa.pl> | 2018-06-12 20:37:51 (GMT) |
commit | 33cd058f21d0673253c88cea70388282918992bc (patch) | |
tree | 939d1aa091d5b69bafc4f75e68acd3aedbdbbfe0 /Lib | |
parent | c3f55be7dd012b7e92901627d0b31c21e983ccb4 (diff) | |
download | cpython-33cd058f21d0673253c88cea70388282918992bc.zip cpython-33cd058f21d0673253c88cea70388282918992bc.tar.gz cpython-33cd058f21d0673253c88cea70388282918992bc.tar.bz2 |
bpo-32108: Don't clear configparser values if key is assigned to itself (GH-7588)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/configparser.py | 3 | ||||
-rw-r--r-- | Lib/test/test_configparser.py | 6 |
2 files changed, 8 insertions, 1 deletions
diff --git a/Lib/configparser.py b/Lib/configparser.py index ea788ae..4a16101 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -963,7 +963,8 @@ class RawConfigParser(MutableMapping): def __setitem__(self, key, value): # To conform with the mapping protocol, overwrites existing values in # the section. - + if key in self and self[key] is value: + return # XXX this is not atomic if read_dict fails at any point. Then again, # no update method in configparser is atomic in this implementation. if key == self.default_section: diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py index f4df622..f16da11 100644 --- a/Lib/test/test_configparser.py +++ b/Lib/test/test_configparser.py @@ -850,12 +850,18 @@ boolean {0[0]} NO self.assertEqual(set(cf['section3'].keys()), {'named'}) self.assertNotIn('name3', cf['section3']) self.assertEqual(cf.sections(), ['section1', 'section2', 'section3']) + # For bpo-32108, assigning default_section to itself. + cf[self.default_section] = cf[self.default_section] + self.assertNotEqual(set(cf[self.default_section].keys()), set()) cf[self.default_section] = {} self.assertEqual(set(cf[self.default_section].keys()), set()) self.assertEqual(set(cf['section1'].keys()), {'name1'}) self.assertEqual(set(cf['section2'].keys()), {'name22'}) self.assertEqual(set(cf['section3'].keys()), set()) self.assertEqual(cf.sections(), ['section1', 'section2', 'section3']) + # For bpo-32108, assigning section to itself. + cf['section2'] = cf['section2'] + self.assertEqual(set(cf['section2'].keys()), {'name22'}) def test_invalid_multiline_value(self): if self.allow_no_value: |