Fix SF #749831, copy raises SystemError when getstate raises exception
diff --git a/Lib/test/test_copy.py b/Lib/test/test_copy.py
index 0e39e83..c734a9a 100644
--- a/Lib/test/test_copy.py
+++ b/Lib/test/test_copy.py
@@ -515,6 +515,12 @@
         self.assert_(x is not y)
         self.assert_(x[0] is not y[0])
 
+    def test_getstate_exc(self):
+        class EvilState(object):
+            def __getstate__(self):
+                raise ValueError, "ain't got no stickin' state"
+        self.assertRaises(ValueError, copy.copy, EvilState())
+
 def test_main():
     test_support.run_unittest(TestCopy)
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 93f34ed..3e15697 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2536,6 +2536,8 @@
 	if (getstate != NULL) {
 		state = PyObject_CallObject(getstate, NULL);
 		Py_DECREF(getstate);
+		if (state == NULL)
+			goto end;
 	}
 	else {
 		state = PyObject_GetAttrString(obj, "__dict__");