From 596ac6d9686ea2ea0d62b237748669e19f66d7a0 Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Fri, 26 Nov 2021 15:44:26 +0300
Subject: [PATCH] [*] Old format emissions load fix

---
 modules/common/dap_chain_datum_token.c         | 16 +++++++++-------
 modules/common/include/dap_chain_datum_token.h |  2 +-
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c
index 3187d5384b..140a22e8cd 100644
--- a/modules/common/dap_chain_datum_token.c
+++ b/modules/common/dap_chain_datum_token.c
@@ -236,22 +236,24 @@ size_t dap_chain_datum_emission_get_size(uint8_t *a_emission_serial)
     return l_ret;
 }
 
-dap_chain_datum_token_emission_t *dap_chain_datum_emission_read(uint8_t *a_emission_serial, size_t *a_emission_size)
+dap_chain_datum_token_emission_t *dap_chain_datum_emission_read(byte_t *a_emission_serial, size_t *a_emission_size)
 {
     assert(a_emission_serial);
     assert(a_emission_size);
     dap_chain_datum_token_emission_t *l_emission;
     if (((dap_chain_datum_token_emission_t *)a_emission_serial)->hdr.version == 0) {
-        size_t l_add_size = DAP_CHAIN_DATUM_NONCE_SIZE + sizeof(uint256_t) - sizeof(uint64_t);
-        l_emission = DAP_NEW_Z_SIZE(dap_chain_datum_token_emission_t, *a_emission_size + l_add_size);
+        size_t l_emission_size = *a_emission_size;
         size_t l_old_hdr_size = sizeof(struct dap_chain_emission_header_v0);
+        size_t l_add_size = sizeof(l_emission->hdr) - l_old_hdr_size;
+        l_emission = DAP_NEW_Z_SIZE(dap_chain_datum_token_emission_t, l_emission_size + l_add_size);
         l_emission->hdr.version = 1;
         memcpy(l_emission, a_emission_serial, l_old_hdr_size);
-        memcpy(l_emission + l_old_hdr_size + l_add_size,
+        memcpy((byte_t *)l_emission + sizeof(l_emission->hdr),
                a_emission_serial + l_old_hdr_size,
-               *a_emission_size - l_old_hdr_size);
-        *a_emission_size += l_add_size;
+               l_emission_size - l_old_hdr_size);
+        l_emission_size += l_add_size;
+        (*a_emission_size) = l_emission_size;
     } else
-        l_emission = DAP_DUP_SIZE(a_emission_serial, *a_emission_size);
+        l_emission = DAP_DUP_SIZE(a_emission_serial, (*a_emission_size));
     return l_emission;
 }
diff --git a/modules/common/include/dap_chain_datum_token.h b/modules/common/include/dap_chain_datum_token.h
index a07829a434..78f1792d2e 100644
--- a/modules/common/include/dap_chain_datum_token.h
+++ b/modules/common/include/dap_chain_datum_token.h
@@ -253,5 +253,5 @@ dap_tsd_t* dap_chain_datum_token_tsd_get(dap_chain_datum_token_t * a_token,  siz
 void dap_chain_datum_token_flags_dump(dap_string_t * a_str_out, uint16_t a_flags);
 void dap_chain_datum_token_certs_dump(dap_string_t * a_str_out, byte_t * a_data_n_tsd, size_t a_certs_size);
 dap_sign_t ** dap_chain_datum_token_simple_signs_parse(dap_chain_datum_token_t * a_datum_token, size_t a_datum_token_size, size_t *a_signs_count, size_t * a_signs_valid);
-dap_chain_datum_token_emission_t *dap_chain_datum_emission_read(uint8_t *a_emission_serial, size_t *a_emission_size);
+dap_chain_datum_token_emission_t *dap_chain_datum_emission_read(byte_t *a_emission_serial, size_t *a_emission_size);
 size_t dap_chain_datum_emission_get_size(uint8_t *a_emission_serial);
-- 
GitLab