mirror of https://github.com/python/cpython
- Issue #3537: Fix an assertion failure when an empty but presized dict
object was stored in the freelist.
This commit is contained in:
parent
14646337bf
commit
1e13ea94a3
|
@ -544,6 +544,17 @@ class DictTest(unittest.TestCase):
|
||||||
resizing = True
|
resizing = True
|
||||||
d[9] = 6
|
d[9] = 6
|
||||||
|
|
||||||
|
def test_empty_presized_dict_in_freelist(self):
|
||||||
|
# Bug #3537: if an empty but presized dict with a size larger
|
||||||
|
# than 7 was in the freelist, it triggered an assertion failure
|
||||||
|
try:
|
||||||
|
d = {'a': 1/0, 'b': None, 'c': None, 'd': None, 'e': None,
|
||||||
|
'f': None, 'g': None, 'h': None}
|
||||||
|
except ZeroDivisionError:
|
||||||
|
pass
|
||||||
|
d = {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from test import mapping_tests
|
from test import mapping_tests
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.6 beta 3?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #3537: Fix an assertion failure when an empty but presized dict
|
||||||
|
object was stored in the freelist.
|
||||||
|
|
||||||
- Issue #1481296: Make long(float('nan')) and int(float('nan')) raise
|
- Issue #1481296: Make long(float('nan')) and int(float('nan')) raise
|
||||||
ValueError consistently across platforms.
|
ValueError consistently across platforms.
|
||||||
|
|
||||||
|
|
|
@ -241,6 +241,10 @@ PyDict_New(void)
|
||||||
_Py_NewReference((PyObject *)mp);
|
_Py_NewReference((PyObject *)mp);
|
||||||
if (mp->ma_fill) {
|
if (mp->ma_fill) {
|
||||||
EMPTY_TO_MINSIZE(mp);
|
EMPTY_TO_MINSIZE(mp);
|
||||||
|
} else {
|
||||||
|
/* At least set ma_table and ma_mask; these are wrong
|
||||||
|
if an empty but presized dict is added to freelist */
|
||||||
|
INIT_NONZERO_DICT_SLOTS(mp);
|
||||||
}
|
}
|
||||||
assert (mp->ma_used == 0);
|
assert (mp->ma_used == 0);
|
||||||
assert (mp->ma_table == mp->ma_smalltable);
|
assert (mp->ma_table == mp->ma_smalltable);
|
||||||
|
|
Loading…
Reference in New Issue