]> 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)
committerVille Savolainen <ville.savolainen@open-xchange.com>
Mon, 1 Apr 2019 10:48:51 +0000 (10:48 +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 3a0e179801f16e0216693da113abe963a4af7eb2..3d49bb2ea1a6a982ff42f0c5cde9a3875b077aac 100644 (file)
@@ -231,7 +231,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 928ab0f29b911d26fef38b51ff9cb2d2f7389f20..521c2424a6fa8d123e3ebcf84f162602fa54051b 100644 (file)
@@ -304,7 +304,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;
        }
@@ -314,7 +314,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;
        }