diff options
author | Raymond Hettinger <python@rcn.com> | 2004-10-26 01:52:37 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-10-26 01:52:37 (GMT) |
commit | 561fbf138d30896af3e7afe33f9bc602dda5f2b7 (patch) | |
tree | 58e1d9ea5979c53cb547c7a5fd3b925ef75fb18c | |
parent | 3ed238503d7f9764f670794be20c4a4a0011487a (diff) | |
download | cpython-561fbf138d30896af3e7afe33f9bc602dda5f2b7.zip cpython-561fbf138d30896af3e7afe33f9bc602dda5f2b7.tar.gz cpython-561fbf138d30896af3e7afe33f9bc602dda5f2b7.tar.bz2 |
SF bug #1054139: serious string hashing error in 2.4b1
_PyString_Resize() readied strings for mutation but did not invalidate
the cached hash value.
-rw-r--r-- | Lib/test/string_tests.py | 9 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Objects/stringobject.c | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py index 4335965..c8ed07c 100644 --- a/Lib/test/string_tests.py +++ b/Lib/test/string_tests.py @@ -80,6 +80,15 @@ class CommonTest(unittest.TestCase): args = self.fixtype(args) getattr(object, methodname)(*args) + def test_hash(self): + # SF bug 1054139: += optimization was not invalidating cached hash value + a = self.type2test('DNSSEC') + b = self.type2test('') + for c in a: + b += c + hash(b) + self.assertEqual(hash(a), hash(b)) + def test_capitalize(self): self.checkequal(' hello ', ' hello ', 'capitalize') self.checkequal('Hello ', 'Hello ','capitalize') @@ -32,7 +32,7 @@ License Version 2. Core and builtins ----------------- -... +- Bug #1054139 _PyString_Resize() now invalidates its cached hash value. Extension Modules ----------------- diff --git a/Objects/stringobject.c b/Objects/stringobject.c index c87b688..b8e5f41 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -3530,6 +3530,7 @@ _PyString_Resize(PyObject **pv, int newsize) sv = (PyStringObject *) *pv; sv->ob_size = newsize; sv->ob_sval[newsize] = '\0'; + sv->ob_shash = -1; /* invalidate cached hash value */ return 0; } |