Another fix.  Partly reverted the tweaks done by the previous fix.
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index b6ac990..e22e73a 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -290,8 +290,8 @@
                 if key == 'a':
                     return 12
                 raise KeyError
-            def __iter__(self):
-                return iter('xyz')
+            def keys(self):
+                return list('xyz')
 
         m = M()
         g = globals()
@@ -313,8 +313,8 @@
                 if key == 'a':
                     return 12
                 return dict.__getitem__(self, key)
-            def __iter__(self):
-                return iter('xyz')
+            def keys(self):
+                return list('xyz')
 
         d = D()
         self.assertEqual(eval('a', g, d), 12)
@@ -346,8 +346,8 @@
         class C:
             def __getitem__(self, item):
                 raise KeyError(item)
-            def __iter__(self):
-                return 'a'  # XXX Not quite faithful to the SF bug...
+            def keys(self):
+                return 1 # used to be 'a' but that's no longer an error
         self.assertRaises(TypeError, eval, 'dir()', globals(), C())
 
     # Done outside of the method test_z to get the correct scope