]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: array - Fix asserts to work correctly on 32-bit systems
authorAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 4 Jan 2019 14:01:01 +0000 (16:01 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 10 Jan 2019 08:23:25 +0000 (08:23 +0000)
src/lib/array.c
src/lib/array.h
src/lib/test-array.c

index 5817e423d418ff1bb155f0615e27188a2d854025..21578f7e3366f7872e085dc79de8e3d2000ebfec 100644 (file)
@@ -7,7 +7,7 @@
 void *
 array_idx_modifiable_i(const struct array *array, unsigned int idx)
 {
-       i_assert(idx * array->element_size < array->buffer->used);
+       i_assert(idx < array->buffer->used / array->element_size);
        return PTR_OFFSET(array->buffer->data, idx * array->element_size);
 }
 
index ca37fcfbf4e8ebeacd9a1c08ea9226ce54ebd8cb..70c19c89750b1de5ac771c4317896f7ea1bb779f 100644 (file)
@@ -239,7 +239,7 @@ array_get_i(const struct array *array, unsigned int *count_r)
 static inline const void * ATTR_PURE
 array_idx_i(const struct array *array, unsigned int idx)
 {
-       i_assert(idx * array->element_size < array->buffer->used);
+       i_assert(idx < array->buffer->used / array->element_size);
        return CONST_PTR_OFFSET(array->buffer->data, idx * array->element_size);
 }
 #define array_idx(array, idx) \
index 8fde0ee3aeaf31159a58ec1e34aaae832c85f591..4f92f1f98dba962fb6a9926af37fcf4e9af33cbd 100644 (file)
@@ -334,7 +334,7 @@ enum fatal_test_state fatal_array(unsigned int stage)
                test_begin("fatal_array");
                t_array_init(&ad, 3);
                /* allocation big enough, but memory not initialised */
-               test_expect_fatal_string("(array_idx_i): assertion failed: (idx * array->element_size < array->buffer->used)");
+               test_expect_fatal_string("(array_idx_i): assertion failed: (idx < array->buffer->used / array->element_size)");
                useless_ptr = array_idx(&ad, 0);
                return FATAL_TEST_FAILURE;
        }
@@ -344,7 +344,7 @@ enum fatal_test_state fatal_array(unsigned int stage)
                t_array_init(&ad, 2);
                array_append(&ad, tmpd, 2);
                /* actual out of range address requested */
-               test_expect_fatal_string("(array_idx_i): assertion failed: (idx * array->element_size < array->buffer->used)");
+               test_expect_fatal_string("(array_idx_i): assertion failed: (idx < array->buffer->used / array->element_size)");
                useless_ptr = array_idx(&ad, 2);
                return FATAL_TEST_FAILURE;
        }