Make sure that PyDict_GetItem[String]() *never* raises an exception.
If the argument is not a dictionary, simply return NULL. If the
hash() on the key fails, clear the error.
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 06d2dc4..7fed379 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -317,7 +317,6 @@
{
long hash;
if (!PyDict_Check(op)) {
- PyErr_BadInternalCall();
return NULL;
}
if (((dictobject *)op)->ma_table == NULL)
@@ -328,8 +327,10 @@
#endif
{
hash = PyObject_Hash(key);
- if (hash == -1)
+ if (hash == -1) {
+ PyErr_Clear();
return NULL;
+ }
}
return lookdict((dictobject *)op, key, hash) -> me_value;
}