From 6b2a24b96f36997c441d6f83688c81edfdc5c146 Mon Sep 17 00:00:00 2001 From: Torsten Sommer Date: Sun, 6 Oct 2024 21:51:03 +0200 Subject: [PATCH] Add missing checks to fmi3{Get|Set}Binary (#601) fixes #595 --- src/fmi3Functions.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/fmi3Functions.c b/src/fmi3Functions.c index 8b1981c9..96eefe2a 100644 --- a/src/fmi3Functions.c +++ b/src/fmi3Functions.c @@ -49,7 +49,7 @@ do { \ #define GET_VARIABLES(T) \ BEGIN_FUNCTION(Get ## T); \ if (nValueReferences == 0) goto TERMINATE; \ -else ASSERT_NOT_NULL(valueReferences); \ +ASSERT_NOT_NULL(valueReferences); \ if (nValues > 0) ASSERT_NOT_NULL(values); \ if (S->isDirtyValues) { \ CALL(calculateValues(S)); \ @@ -568,6 +568,21 @@ fmi3Status fmi3GetBinary(fmi3Instance instance, BEGIN_FUNCTION(GetBinary); + if (nValueReferences == 0) { + goto TERMINATE; + } else { + ASSERT_NOT_NULL(valueReferences); + } + + if (nValues > 0) { + ASSERT_NOT_NULL(values); + } + + if (S->isDirtyValues) { + CALL(calculateValues(S)); + S->isDirtyValues = false; + } + size_t index = 0; for (size_t i = 0; i < nValueReferences; i++) { @@ -695,12 +710,27 @@ fmi3Status fmi3SetBinary(fmi3Instance instance, BEGIN_FUNCTION(SetBinary); + if (nValueReferences == 0) { + goto TERMINATE; + } + + ASSERT_NOT_NULL(valueReferences); + size_t index = 0; for (size_t i = 0; i < nValueReferences; i++) { CALL(setBinary(S, (ValueReference)valueReferences[i], valueSizes, (const char* const*)values, nValues, &index)); } + if (nValueReferences > 0) { + S->isDirtyValues = true; + } + + if (index != nValues) { + logError(S, "Expected nValues = %zu but was %zu.", index, nValues); \ + CALL(Error); + } + END_FUNCTION(); }