[Python-checkins] CVS: python/dist/src/Lib/test test_mutants.py,1.5,1.6

Tim Peters tim_one@users.sourceforge.net
2001年6月02日 21:54:34 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv9638/python/dist/src/Lib/test
Modified Files:
	test_mutants.py 
Log Message:
lookdict: stop more insane core-dump mutating comparison cases. Should
be possible to provoke unbounded recursion now, but leaving that to someone
else to provoke and repair.
Bugfix candidate -- although this is getting harder to backstitch, and the
cases it's protecting against are mondo contrived.
Index: test_mutants.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_mutants.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** test_mutants.py	2001年06月02日 08:18:58	1.5
--- test_mutants.py	2001年06月03日 04:54:32	1.6
***************
*** 216,217 ****
--- 216,285 ----
 os.unlink(TESTFN)
 del f, dict
+ 
+ 
+ ##########################################################################
+ # And another core-dumper from Michael Hudson.
+ 
+ dict = {}
+ 
+ # let's force dict to malloc its table
+ for i in range(1, 10):
+ dict[i] = i
+ 
+ class Machiavelli2:
+ def __eq__(self, other):
+ dict.clear()
+ return 1
+ 
+ def __hash__(self):
+ return 0
+ 
+ dict[Machiavelli2()] = Machiavelli2()
+ 
+ try:
+ dict[Machiavelli2()]
+ except KeyError:
+ pass
+ 
+ del dict
+ 
+ ##########################################################################
+ # And another core-dumper from Michael Hudson.
+ 
+ dict = {}
+ 
+ # let's force dict to malloc its table
+ for i in range(1, 10):
+ dict[i] = i
+ 
+ class Machiavelli3:
+ def __init__(self, id):
+ self.id = id
+ 
+ def __eq__(self, other):
+ if self.id == other.id:
+ dict.clear()
+ return 1
+ else:
+ return 0
+ 
+ def __repr__(self):
+ return "%s(%s)"%(self.__class__.__name__, self.id)
+ 
+ def __hash__(self):
+ return 0
+ 
+ dict[Machiavelli3(1)] = Machiavelli3(0)
+ dict[Machiavelli3(2)] = Machiavelli3(0)
+ 
+ f = open(TESTFN, "w")
+ try:
+ try:
+ print >> f, dict[Machiavelli3(2)]
+ except KeyError:
+ pass
+ finally:
+ f.close()
+ os.unlink(TESTFN)
+ 
+ del dict

AltStyle によって変換されたページ (->オリジナル) /