]> granicus.if.org Git - python/commitdiff
don't make shared keys with dict subclasses
authorBenjamin Peterson <benjamin@python.org>
Mon, 23 Apr 2012 15:50:47 +0000 (11:50 -0400)
committerBenjamin Peterson <benjamin@python.org>
Mon, 23 Apr 2012 15:50:47 +0000 (11:50 -0400)
Objects/dictobject.c

index 2e45c8d8fdd4d1157bb6b3313b596f53ce574489..2afbbaee503e280280fc52bf5f6a3a317b4060f1 100644 (file)
@@ -3686,7 +3686,7 @@ _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr,
             res = PyDict_SetItem(dict, key, value);
             if (cached != ((PyDictObject *)dict)->ma_keys) {
                 /* Either update tp->ht_cached_keys or delete it */
-                if (cached->dk_refcnt == 1) {
+                if (cached->dk_refcnt == 1 && PyDict_CheckExact(dict)) {
                     CACHED_KEYS(tp) = make_keys_shared(dict);
                     if (CACHED_KEYS(tp) == NULL)
                         return -1;