diff --git a/dap-sdk/core/include/dap_tsd.h b/dap-sdk/core/include/dap_tsd.h
index d6530350986ece3241dd433c7a8b13a91472cbb5..7ed354ba0da4b46175cccab689c6a10bf6427f7a 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 )