Преглед на файлове

The checks have to be relaxed to allow methods with dynamic array len… (#711)

* The checks have to be relaxed to allow methods with dynamic array lengths
UaExpert passes arrayDimensionsSize of 1 with a number of array elemens.

* check dimensions when defined
Sten Grüner преди 8 години
родител
ревизия
0a28a5f56c
променени са 1 файла, в които са добавени 7 реда и са изтрити 5 реда
  1. 7 5
      src/server/ua_services_call.c

+ 7 - 5
src/server/ua_services_call.c

@@ -87,12 +87,14 @@ satisfySignature(UA_Server *server, const UA_Variant *var, const UA_Argument *ar
         break;
     }
 
-    /* do the array dimensions match? */
-    if(arg->arrayDimensionsSize != varDimsSize)
-        return UA_STATUSCODE_BADINVALIDARGUMENT;
-    for(size_t i = 0; i < varDimsSize; i++) {
-        if((UA_Int32)arg->arrayDimensions[i] != varDims[i])
+    /* Do the variants dimensions match? Check only if defined in the argument. */
+    if(arg->arrayDimensionsSize > 0) {
+        if(arg->arrayDimensionsSize != varDimsSize)
             return UA_STATUSCODE_BADINVALIDARGUMENT;
+        for(size_t i = 0; i < varDimsSize; i++) {
+            if((UA_Int32)arg->arrayDimensions[i] != varDims[i])
+                return UA_STATUSCODE_BADINVALIDARGUMENT;
+        }
     }
     return UA_STATUSCODE_GOOD;
 }