Merged revisions 72907 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r72907 | benjamin.peterson | 2009-05-24 21:40:21 -0500 (Sun, 24 May 2009) | 1 line

  handle errors from _PyObject_LookupSpecial when __get__ fails
........
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 56e5b71..3b2de9d 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -90,8 +90,12 @@
 
 	/* try o.__length_hint__() */
         hintmeth = _PyObject_LookupSpecial(o, "__length_hint__", &hintstrobj);
-	if (hintmeth == NULL)
-		return defaultvalue;
+	if (hintmeth == NULL) {
+		if (PyErr_Occurred())
+			return -1;
+		else
+			return defaultvalue;
+	}
 	ro = PyObject_CallFunctionObjArgs(hintmeth, NULL);
 	Py_DECREF(hintmeth);
 	if (ro == NULL) {
@@ -2592,6 +2596,8 @@
 		}
 		return ok;
 	}
+	else if (PyErr_Occurred())
+		return -1;
 	return recursive_isinstance(inst, cls);
 }
 
@@ -2655,6 +2661,8 @@
 		}
 		return ok;
 	}
+	else if (PyErr_Occurred())
+		return -1;
 	return recursive_issubclass(derived, cls);
 }
 
diff --git a/Objects/enumobject.c b/Objects/enumobject.c
index f8e4072..62e55bb 100644
--- a/Objects/enumobject.c
+++ b/Objects/enumobject.c
@@ -238,6 +238,8 @@
 		Py_DECREF(reversed_meth);
 		return res;
 	}
+	else if (PyErr_Occurred())
+		return NULL;
 
 	if (!PySequence_Check(seq)) {
 		PyErr_SetString(PyExc_TypeError,
diff --git a/Objects/object.c b/Objects/object.c
index 58b70f0..a29c31a 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -497,6 +497,8 @@
             }
             return result;
 	}
+	else if (PyErr_Occurred())
+		return NULL;
 	return PyBytes_FromObject(v);
 }