From bcc4b9fd8c600467e3114886da006c0c08b0432e Mon Sep 17 00:00:00 2001 From: Dmitry Gerasimov <dmitriy.gerasimov@demlabs.net> Date: Mon, 5 Sep 2022 16:53:04 +0700 Subject: [PATCH] [+] Some built in TSD sections checks for its size --- dap-sdk/core/include/dap_tsd.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dap-sdk/core/include/dap_tsd.h b/dap-sdk/core/include/dap_tsd.h index d653035098..7ed354ba0d 100644 --- a/dap-sdk/core/include/dap_tsd.h +++ b/dap-sdk/core/include/dap_tsd.h @@ -34,11 +34,14 @@ dap_tsd_t * dap_tsd_create(uint16_t a_type, const void * a_data, size_t a_data_ dap_tsd_t* dap_tsd_find(byte_t * a_data, size_t a_data_size,uint16_t a_type); #define dap_tsd_create_scalar(type,value) dap_tsd_create (type, &value, sizeof(value) ) -#define dap_tsd_get_scalar(a,typeconv) *((typeconv*) a->data) +#define dap_tsd_get_scalar(a,typeconv) ( a->size >= sizeof(typeconv) ? *((typeconv*) a->data) : (typeconv) {0}) +#define DAP_TSD_CORRUPTED_STRING "<CORRUPTED STRING>" // NULL-terminated string #define dap_tsd_create_string(type,str) dap_tsd_create (type,str, dap_strlen(str)+1) -#define dap_tsd_get_string(a) ( ((char*) a->data )[a->size-1] == '\0'? (char*) a->data : "<CORRUPTED STRING>" ) -#define dap_tsd_get_string_const(a) ( ((const char*) a->data )[a->size-1] == '\0'? (const char*) a->data : "<CORRUPTED STRING>" ) +#define dap_tsd_get_string(a) ( ((char*) a->data )[a->size-1] == '\0'? (char*) a->data : DAP_TSD_CORRUPTED_STRING ) +#define dap_tsd_get_string_const(a) ( ((const char*) a->data )[a->size-1] == '\0'? (const char*) a->data : DAP_TSD_CORRUPTED_STRING ) #define dap_tsd_size(a) (sizeof(*a)+(size_t)a->size) + +#define dap_tsd_size_check(a, offset, total_size) (total_size - offset >= (a)->size ) -- GitLab