From 53f1b44cbcf51aa11379d3065cb757edbb180c6c Mon Sep 17 00:00:00 2001
From: "alexey.stratulat" <alexey.stratulat@demlabs.net>
Date: Thu, 27 Jan 2022 23:49:37 +0700
Subject: [PATCH] [*] Fixed reading datum token from datum. Also, the size of
 the emission token datum has been added to the
 PyDapChainDatumTokenEmissionObject structure.

---
 .../cellframe-sdk/common/include/wrapping_dap_chain_datum.h   | 3 ++-
 modules/cellframe-sdk/common/src/wrapping_dap_chain_datum.c   | 3 ++-
 .../cellframe-sdk/common/src/wrapping_dap_chain_datum_token.c | 4 ++--
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/modules/cellframe-sdk/common/include/wrapping_dap_chain_datum.h b/modules/cellframe-sdk/common/include/wrapping_dap_chain_datum.h
index faca0f46..9cffb846 100644
--- a/modules/cellframe-sdk/common/include/wrapping_dap_chain_datum.h
+++ b/modules/cellframe-sdk/common/include/wrapping_dap_chain_datum.h
@@ -30,6 +30,7 @@
 #include "dap_chain_datum_token.h"
 #include "datetime.h"
 #include "wrapping_dap_chain_datum_tx.h"
+#include "dap_common.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -103,7 +104,7 @@ PyObject *dap_chain_datum_get_type_str_py(PyObject *self, PyObject *args);
 PyObject *wrapping_dap_chain_datum_get_version_str_py(PyObject *self, void* closure);
 
 static PyMethodDef DapChainDatumMethods[] = {
-    {"size", dap_chain_datum_size_py, METH_VARARGS, ""},
+    {"getSize", dap_chain_datum_size_py, METH_VARARGS, ""},
     {"isDatumTX", dap_chain_datum_is_type_tx, METH_NOARGS, ""},
     {"getDatumTX", wrapping_dap_chain_datum_get_datum_tx, METH_NOARGS, ""},
     {"isDatumToken", dap_chain_datum_is_type_token, METH_NOARGS, ""},
diff --git a/modules/cellframe-sdk/common/src/wrapping_dap_chain_datum.c b/modules/cellframe-sdk/common/src/wrapping_dap_chain_datum.c
index 1c2677d0..a39c1aad 100644
--- a/modules/cellframe-sdk/common/src/wrapping_dap_chain_datum.c
+++ b/modules/cellframe-sdk/common/src/wrapping_dap_chain_datum.c
@@ -53,7 +53,7 @@ PyObject *wrapping_dap_chain_datum_get_datum_token(PyObject *self, PyObject *arg
                                                              &DapChainDatumToken_DapChainDatumTokenObjectType);
         PyObject_Dir((PyObject*)obj_token);
         size_t l_size_token = ((PyDapChainDatumObject*)self)->datum->header.data_size;
-        obj_token->token = DAP_NEW(dap_chain_datum_token_t);
+        obj_token->token = DAP_NEW_Z_SIZE(dap_chain_datum_token_t, l_size_token);
         memcpy(obj_token->token, ((PyDapChainDatumObject*)self)->datum->data, l_size_token);
         return (PyObject*)obj_token;
     }else{
@@ -82,6 +82,7 @@ PyObject *wrapping_dap_chain_datum_get_datum_token_emission(PyObject *self, PyOb
         size_t l_token_emission_size = ((PyDapChainDatumObject*)self)->datum->header.data_size;
         obj_emission->token_emission = dap_chain_datum_emission_read(((PyDapChainDatumObject*)self)->datum->data,
                                                                      &l_token_emission_size);
+        obj_emission->token_size = l_token_emission_size;
         return (PyObject*)obj_emission;
 
     }else{
diff --git a/modules/cellframe-sdk/common/src/wrapping_dap_chain_datum_token.c b/modules/cellframe-sdk/common/src/wrapping_dap_chain_datum_token.c
index a763998a..6982943c 100644
--- a/modules/cellframe-sdk/common/src/wrapping_dap_chain_datum_token.c
+++ b/modules/cellframe-sdk/common/src/wrapping_dap_chain_datum_token.c
@@ -123,14 +123,14 @@ PyObject *wrapping_dap_chain_datum_token_emission_get_data(PyObject *self, void
         case DAP_CHAIN_DATUM_TOKEN_EMISSION_TYPE_AUTH:
             l_sign_ptr = (dap_sign_t*)token_emi->data.type_auth.signs;
             l_offset = (byte_t*)l_sign_ptr - (byte_t*)token_emi;
-            obj_tmp = PyList_New(token_emi->data.type_auth.signs_count);
+            obj_tmp = PyList_New(0);
             for (size_t i = 0; i < token_emi->data.type_auth.signs_count && l_offset < token_emi_size; i++){
                 if(dap_sign_verify_size(l_sign_ptr, ((PyDapChainDatumTokenEmissionObject*)self)->token_size - l_offset)){
                     obj_tmp_sign = PyObject_New(PyDapSignObject, &DapSignObject_DapSignObjectType);
                     PyObject_Dir((PyObject*)obj_tmp_sign);
                     obj_tmp_sign->sign = DAP_NEW_Z_SIZE(dap_sign_t, dap_sign_get_size(l_sign_ptr));
                     memcpy(obj_tmp_sign->sign, l_sign_ptr, dap_sign_get_size(l_sign_ptr));
-                    if (PyList_SetItem(obj_tmp, (Py_ssize_t)i, (PyObject*)obj_tmp_sign) == -1){
+                    if (PyList_Append(obj_tmp, (PyObject*)obj_tmp_sign) == -1){
                         return NULL;
                     }
                     l_offset += dap_sign_get_size(l_sign_ptr);
-- 
GitLab