]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-32108: Don't clear configparser values if key is assigned to itself (GH-7588)
authorCheryl Sabella <cheryl.sabella@gmail.com>
Tue, 12 Jun 2018 20:37:51 +0000 (16:37 -0400)
committerŁukasz Langa <lukasz@langa.pl>
Tue, 12 Jun 2018 20:37:51 +0000 (13:37 -0700)
Lib/configparser.py
Lib/test/test_configparser.py
Misc/NEWS.d/next/Library/2018-06-10-12-15-26.bpo-32108.iEkvh0.rst [new file with mode: 0644]

index ea788aec51007900ff8effecd4d28f687d2597ca..4a16101c7a3ab68e507e736cee5fd57a8c349126 100644 (file)
@@ -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:
index f4df622050b9110ffb9716d694526296c175a083..f16da116a745f3a899dd3e8fbbebd0e3b0e7b6fb 100644 (file)
@@ -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:
diff --git a/Misc/NEWS.d/next/Library/2018-06-10-12-15-26.bpo-32108.iEkvh0.rst b/Misc/NEWS.d/next/Library/2018-06-10-12-15-26.bpo-32108.iEkvh0.rst
new file mode 100644 (file)
index 0000000..154d884
--- /dev/null
@@ -0,0 +1 @@
+In configparser, don't clear section when it is assigned to itself.