Issue 3514: Fixed segfault dues to infinite loop in __getattr__.
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index c9ebdb8..a622145 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -868,6 +868,14 @@
             y = self.loads(s)
             self.assertEqual(y._reduce_called, 1)
 
+    def test_bad_getattr(self):
+        x = BadGetattr()
+        for proto in 0, 1:
+            self.assertRaises(RuntimeError, self.dumps, x, proto)
+        # protocol 2 don't raise a RuntimeError.
+        d = self.dumps(x, 2)
+        self.assertRaises(RuntimeError, self.loads, d)
+
 # Test classes for reduce_ex
 
 class REX_one(object):
@@ -949,6 +957,10 @@
         # raise an error, to make sure this isn't called
         raise TypeError("SimpleNewObj.__init__() didn't expect to get called")
 
+class BadGetattr:
+    def __getattr__(self, key):
+        self.foo
+
 class AbstractPickleModuleTests(unittest.TestCase):
 
     def test_dump_closed_file(self):