[Python-checkins] cpython: Add assertions to dk_set_index()

victor.stinner python-checkins at python.org
Thu Sep 8 14:03:34 EDT 2016


https://hg.python.org/cpython/rev/36545fa93d2b
changeset: 103325:36545fa93d2b
user: Victor Stinner <victor.stinner at gmail.com>
date: Thu Sep 08 10:52:46 2016 -0700
summary:
 Add assertions to dk_set_index()
Issue #27350.
files:
 Objects/dictobject.c | 18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -304,20 +304,24 @@
 dk_get_index(PyDictKeysObject *keys, Py_ssize_t i)
 {
 Py_ssize_t s = DK_SIZE(keys);
+ Py_ssize_t ix;
+
 if (s <= 0xff) {
- return ((char*) &keys->dk_indices[0])[i];
+ ix = ((char*) &keys->dk_indices[0])[i];
 }
 else if (s <= 0xffff) {
- return ((int16_t*)&keys->dk_indices[0])[i];
+ ix = ((int16_t*)&keys->dk_indices[0])[i];
 }
 #if SIZEOF_VOID_P > 4
 else if (s <= 0xffffffff) {
- return ((int32_t*)&keys->dk_indices[0])[i];
+ ix = ((int32_t*)&keys->dk_indices[0])[i];
 }
 #endif
 else {
- return ((Py_ssize_t*)&keys->dk_indices[0])[i];
+ ix = ((Py_ssize_t*)&keys->dk_indices[0])[i];
 }
+ assert(ix >= DKIX_DUMMY);
+ return ix;
 }
 
 /* write to indices. */
@@ -325,14 +329,20 @@
 dk_set_index(PyDictKeysObject *keys, Py_ssize_t i, Py_ssize_t ix)
 {
 Py_ssize_t s = DK_SIZE(keys);
+
+ assert(ix >= DKIX_DUMMY);
+
 if (s <= 0xff) {
+ assert(ix <= 0x7f);
 ((char*) &keys->dk_indices[0])[i] = (char)ix;
 }
 else if (s <= 0xffff) {
+ assert(ix <= 0x7fff);
 ((int16_t*) &keys->dk_indices[0])[i] = (int16_t)ix;
 }
 #if SIZEOF_VOID_P > 4
 else if (s <= 0xffffffff) {
+ assert(ix <= 0x7fffffff);
 ((int32_t*) &keys->dk_indices[0])[i] = (int32_t)ix;
 }
 #endif
-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list

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