]> granicus.if.org Git - python/commitdiff
use the stricter PyMapping_Check (closes #15801)
authorBenjamin Peterson <benjamin@python.org>
Tue, 28 Aug 2012 21:55:35 +0000 (17:55 -0400)
committerBenjamin Peterson <benjamin@python.org>
Tue, 28 Aug 2012 21:55:35 +0000 (17:55 -0400)
Lib/test/string_tests.py
Misc/NEWS
Objects/unicodeobject.c

index d7925290206c2bf01e5232d8a00be036faea2cf4..413f9dd8feabc6739cfad098d2a190c3af3c65d1 100644 (file)
@@ -1142,6 +1142,9 @@ class MixinStrUnicodeUserStringTest:
         self.checkraises(TypeError, '%10.*f', '__mod__', ('foo', 42.))
         self.checkraises(ValueError, '%10', '__mod__', (42,))
 
+        class X(object): pass
+        self.checkraises(TypeError, 'abc', '__mod__', X())
+
     def test_floatformatting(self):
         # float formatting
         for prec in range(100):
index b333c0cc7643357e1ad885fd1e5fc4aa72f54edf..25be2aa88ee62361e1ef2635bc7dfab431b90fa7 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ Core and Builtins
 
 - Issue #15761: Fix crash when PYTHONEXECUTABLE is set on Mac OS X.
 
+- Issue #15801: Make sure mappings passed to '%' formatting are actually
+  subscriptable.
+
 - Issue #15726: Fix incorrect bounds checking in PyState_FindModule.
   Patch by Robin Schreiber.
 
index b25b17b6a038ef7903205ef1848ef72dbce579e0..8b782b4065e55ffbadc8d9cd60ee97e9c7077b7b 100644 (file)
@@ -9504,8 +9504,7 @@ PyObject *PyUnicode_Format(PyObject *format,
         arglen = -1;
         argidx = -2;
     }
-    if (Py_TYPE(args)->tp_as_mapping && !PyTuple_Check(args) &&
-        !PyUnicode_Check(args))
+    if (PyMapping_Check(args) && !PyTuple_Check(args) && !PyUnicode_Check(args))
         dict = args;
 
     while (--fmtcnt >= 0) {