Browse Source

fixed bug related to #332 (1d array as input argument for methods)

FlorianPalm 9 years ago
parent
commit
d25858ad71
1 changed files with 11 additions and 3 deletions
  1. 11 3
      src/server/ua_services_call.c

+ 11 - 3
src/server/ua_services_call.c

@@ -53,15 +53,23 @@ static UA_StatusCode statisfySignature(UA_Variant *var, UA_Argument arg) {
         if(arg.valueRank >= 1 && var->arrayDimensionsSize != arg.arrayDimensionsSize)
             return UA_STATUSCODE_BADINVALIDARGUMENT;
         
-        if(arg.arrayDimensionsSize >= 1) {
+        //variants do not always encode the dimension flag (e.g. 1d array)
+       if(var->arrayDimensionsSize==-1 && arg.arrayDimensionsSize == 1 &&
+    		   var->arrayLength > 0 && arg.arrayDimensions[0] == (UA_UInt32)var->arrayLength ){
+    	   return UA_STATUSCODE_GOOD;
+       }else{
+         if(arg.valueRank >= 1 && var->arrayDimensionsSize != arg.arrayDimensionsSize)
+            return UA_STATUSCODE_BADINVALIDARGUMENT;
+         if(arg.arrayDimensionsSize >= 1) {
             if(arg.arrayDimensionsSize != var->arrayDimensionsSize)
                 return UA_STATUSCODE_BADINVALIDARGUMENT;
             for(UA_Int32 i = 0; i < arg.arrayDimensionsSize; i++) {
                 if(arg.arrayDimensions[i] != (UA_UInt32) var->arrayDimensions[i])
                     return UA_STATUSCODE_BADINVALIDARGUMENT;
             }
-        }
-   return UA_STATUSCODE_GOOD;
+         }
+    }
+    return UA_STATUSCODE_GOOD;
 }
 
 static UA_StatusCode argConformsToDefinition(UA_CallMethodRequest *rs, const UA_VariableNode *argDefinition) {