Fix SF # 624982, Potential AV in slot_sq_item, by Greg Chapman

Don't crash when getting value of a property raises an exception
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index c9bd1cd..7573bfd 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -1814,6 +1814,18 @@
             raise TestFailed("expected TypeError from trying to set "
                              "readonly %r attr on a property" % attr)
 
+    class D(object):
+        __getitem__ = property(lambda s: 1/0)
+
+    d = D()
+    try:
+        for i in d:
+            str(i)
+    except ZeroDivisionError:
+        pass
+    else:
+        raise TestFailed, "expected ZeroDivisionError from bad property"
+
 def supers():
     if verbose: print "Testing super..."
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index ed5b829..e624ec4 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -3145,8 +3145,12 @@
 	if (func != NULL) {
 		if ((f = func->ob_type->tp_descr_get) == NULL)
 			Py_INCREF(func);
-		else
+		else {
 			func = f(func, self, (PyObject *)(self->ob_type));
+			if (func == NULL) {
+				return NULL;
+			}
+		}
 		ival = PyInt_FromLong(i);
 		if (ival != NULL) {
 			args = PyTuple_New(1);