mirror of
https://github.com/python/cpython.git
synced 2025-07-30 06:34:15 +00:00
Fix SF bug #1546288, crash in dict_equal.
This commit is contained in:
parent
c4a70fbb78
commit
a22975fb35
3 changed files with 15 additions and 2 deletions
|
@ -91,12 +91,17 @@ class Horrid:
|
||||||
self.hashcode = random.randrange(1000000000)
|
self.hashcode = random.randrange(1000000000)
|
||||||
|
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
|
return 42
|
||||||
return self.hashcode
|
return self.hashcode
|
||||||
|
|
||||||
def __cmp__(self, other):
|
def __cmp__(self, other):
|
||||||
maybe_mutate() # The point of the test.
|
maybe_mutate() # The point of the test.
|
||||||
return cmp(self.i, other.i)
|
return cmp(self.i, other.i)
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
maybe_mutate() # The point of the test.
|
||||||
|
return self.i == other.i
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "Horrid(%d)" % self.i
|
return "Horrid(%d)" % self.i
|
||||||
|
|
||||||
|
@ -132,7 +137,10 @@ def test_one(n):
|
||||||
while dict1 and len(dict1) == len(dict2):
|
while dict1 and len(dict1) == len(dict2):
|
||||||
if verbose:
|
if verbose:
|
||||||
print ".",
|
print ".",
|
||||||
|
if random.random() < 0.5:
|
||||||
c = cmp(dict1, dict2)
|
c = cmp(dict1, dict2)
|
||||||
|
else:
|
||||||
|
c = dict1 == dict2
|
||||||
if verbose:
|
if verbose:
|
||||||
print
|
print
|
||||||
|
|
||||||
|
|
|
@ -17,12 +17,14 @@ Core and builtins
|
||||||
|
|
||||||
- Patch #1542451: disallow continue anywhere under a finally.
|
- Patch #1542451: disallow continue anywhere under a finally.
|
||||||
|
|
||||||
|
- Patch #1546288: fix seg fault in dict_equal due to ref counting bug.
|
||||||
|
|
||||||
|
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
- Patch #1550886: Fix decimal module context management implementation
|
- Patch #1550886: Fix decimal module context management implementation
|
||||||
to match the localcontext() example from PEP 343
|
to match the localcontext() example from PEP 343.
|
||||||
|
|
||||||
- Bug #1541863: uuid.uuid1 failed to generate unique identifiers
|
- Bug #1541863: uuid.uuid1 failed to generate unique identifiers
|
||||||
on systems with low clock resolution.
|
on systems with low clock resolution.
|
||||||
|
|
|
@ -1585,7 +1585,10 @@ dict_equal(dictobject *a, dictobject *b)
|
||||||
/* temporarily bump aval's refcount to ensure it stays
|
/* temporarily bump aval's refcount to ensure it stays
|
||||||
alive until we're done with it */
|
alive until we're done with it */
|
||||||
Py_INCREF(aval);
|
Py_INCREF(aval);
|
||||||
|
/* ditto for key */
|
||||||
|
Py_INCREF(key);
|
||||||
bval = PyDict_GetItem((PyObject *)b, key);
|
bval = PyDict_GetItem((PyObject *)b, key);
|
||||||
|
Py_DECREF(key);
|
||||||
if (bval == NULL) {
|
if (bval == NULL) {
|
||||||
Py_DECREF(aval);
|
Py_DECREF(aval);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue