From 33fd86bd4d92442fb8f21e95408dd07b31f6ac51 Mon Sep 17 00:00:00 2001
From: Dominik Loidolt <dominik.loidolt@univie.ac.at>
Date: Wed, 28 Feb 2024 10:28:18 +0100
Subject: [PATCH] Fix model update if dst==NULL and in model mode worst case

---
 lib/icu_compress/cmp_icu.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/icu_compress/cmp_icu.c b/lib/icu_compress/cmp_icu.c
index ba3f8f4..593740d 100644
--- a/lib/icu_compress/cmp_icu.c
+++ b/lib/icu_compress/cmp_icu.c
@@ -2341,11 +2341,12 @@ static int32_t cmp_collection(uint8_t *col, uint8_t *model, uint8_t *updated_mod
 		if ((uint32_t)dst_size + COLLECTION_HDR_SIZE > dst_capacity)
 			return CMP_ERROR_SMALL_BUF;
 		memcpy((uint8_t *)dst + dst_size, col, COLLECTION_HDR_SIZE);
-		if (model_mode_is_used(cfg->cmp_mode) && cfg->icu_new_model_buf)
-			memcpy(cfg->icu_new_model_buf, col, COLLECTION_HDR_SIZE);
 	}
 	dst_size += COLLECTION_HDR_SIZE;
 
+	if (model_mode_is_used(cfg->cmp_mode) && updated_model)
+		memcpy(updated_model, col, COLLECTION_HDR_SIZE);
+
 	/* prepare the different buffers */
 	cfg->icu_output_buf = dst;
 	cfg->input_buf = col + COLLECTION_HDR_SIZE;
@@ -2384,6 +2385,8 @@ static int32_t cmp_collection(uint8_t *col, uint8_t *model, uint8_t *updated_mod
 				cfg->cmp_mode = CMP_MODE_RAW;
 				dst_size_bits = compress_data_internal(cfg, dst_size<<3);
 				cfg->cmp_mode = cmp_mode_cpy;
+				if (model_mode_is_used(cfg->cmp_mode) && cfg->icu_new_model_buf)
+					memcpy(cfg->icu_new_model_buf, cfg->input_buf, col_data_length);
 			}
 		}
 		if (dst_size_bits < 0)
-- 
GitLab