]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Add explicit wrapping to 8bit variable increments
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 9 Nov 2020 15:52:51 +0000 (17:52 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 9 Nov 2020 15:52:51 +0000 (17:52 +0200)
Fixes ubsan errors:
runtime error: implicit conversion from type 'int' of value 256 (32-bit, signed) to type 'uint8_t' (aka 'unsigned char') changed the value to 0 (8-bit, unsigned)

src/lib-index/mail-cache-lookup.c
src/lib-index/mail-cache-purge.c

index a9d20e3136c51bed5a99246322ff49eeb5fa5a82..c0695e4154bb731dc0cbf62ea12fbb0946fdced3 100644 (file)
@@ -330,7 +330,8 @@ static int mail_cache_seq(struct mail_cache_view *view, uint32_t seq)
        struct mail_cache_iterate_field field;
        int ret;
 
-       if (++view->cached_exists_value == 0) {
+       view->cached_exists_value = (view->cached_exists_value + 1) % UINT8_MAX;
+       if (view->cached_exists_value == 0) {
                /* wrapped, we'll have to clear the buffer */
                buffer_set_used_size(view->cached_exists_buf, 0);
                view->cached_exists_value++;
index 907310053a0ce26718fbe93f1004802b3aace425..c61c0712957b418d031e47e5d266f7bd874ed097 100644 (file)
@@ -293,7 +293,8 @@ mail_cache_copy(struct mail_cache *cache, struct mail_index_transaction *trans,
                ctx.new_msg = seq >= first_new_seq;
                buffer_set_used_size(ctx.buffer, 0);
 
-               if (++ctx.field_seen_value == 0) {
+               ctx.field_seen_value = (ctx.field_seen_value + 1) % UINT8_MAX;
+               if (ctx.field_seen_value == 0) {
                        memset(buffer_get_modifiable_data(ctx.field_seen, NULL),
                               0, buffer_get_size(ctx.field_seen));
                        ctx.field_seen_value++;