diff -r 2adfa4c60bff -r 2df45e4bd500 targets/plc_debug.c --- a/targets/plc_debug.c Sat Jan 20 11:41:17 2024 +0100 +++ b/targets/plc_debug.c Mon Jan 22 21:30:23 2024 +0100 @@ -348,9 +348,17 @@ #define TRACE_LIST_OVERFLOW 1 #define FORCE_LIST_OVERFLOW 2 #define FORCE_BUFFER_OVERFLOW 3 +#define FORCE_INVALID 4 + +#define __ForceVariable_checksize(TYPENAME) \ + if(sizeof(TYPENAME) != force_size) { \ + error_code = FORCE_BUFFER_OVERFLOW; \ + goto error_cleanup; \ + } #define __ForceVariable_case_t(TYPENAME) \ case TYPENAME##_ENUM : \ + __ForceVariable_checksize(TYPENAME) \ /* add to force_list*/ \ force_list_addvar_cursor->dbgvardsc_index = idx; \ ((__IEC_##TYPENAME##_t *)varp)->flags |= __IEC_FORCE_FLAG; \ @@ -359,6 +367,7 @@ #define __ForceVariable_case_p(TYPENAME) \ case TYPENAME##_P_ENUM : \ case TYPENAME##_O_ENUM : \ + __ForceVariable_checksize(TYPENAME) \ { \ char *next_cursor = force_buffer_cursor + sizeof(TYPENAME); \ if(next_cursor <= force_buffer_end ){ \ @@ -389,7 +398,7 @@ void ResetDebugVariables(void); -int RegisterDebugVariable(dbgvardsc_index_t idx, void* force) +int RegisterDebugVariable(dbgvardsc_index_t idx, void* force, size_t force_size) { int error_code = 0; if(idx < sizeof(dbgvardsc)/sizeof(dbgvardsc_t)){