Przeglądaj źródła

fixed bug within UA_Variant_decodeBinary: Multidimensional array weren't decoded correct. Data of variant was overwritten by arrayDimensions field

FlorianPalm 9 lat temu
rodzic
commit
ef037512e6
3 zmienionych plików z 1 dodań i 8 usunięć
  1. 0 4
      examples/client.c
  2. 0 2
      examples/server.c
  3. 1 2
      src/ua_types_encoding_binary.c

+ 0 - 4
examples/client.c

@@ -90,10 +90,6 @@ int main(int argc, char *argv[]) {
     wReq.nodesToWrite[0].value.value.storageType = UA_VARIANT_DATA_NODELETE; //do not free the integer on deletion
     wReq.nodesToWrite[0].value.value.data = &value;
     
-
-
-
-
     UA_WriteResponse wResp = UA_Client_write(client, &wReq);
     if(wResp.responseHeader.serviceResult == UA_STATUSCODE_GOOD)
             printf("the new value is: %i\n", value);

+ 0 - 2
examples/server.c

@@ -303,7 +303,6 @@ int main(int argc, char** argv) {
    UA_Server_addVariableNode(server, arrayvar, myMultiArrayType, UA_NODEID_NUMERIC(1, 31415),
                              UA_NODEID_NUMERIC(1, ARRAYID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES));
 
-
 #ifdef ENABLE_METHODCALLS
    UA_Argument inputArguments;
    UA_Argument_init(&inputArguments);
@@ -327,7 +326,6 @@ int main(int argc, char** argv) {
                            UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
                            &getMonitoredItems, 1, &inputArguments, 1, &outputArguments);
 #endif
-
 	//start server
 	UA_StatusCode retval = UA_Server_run(server, 1, &running); //blocks until running=false
 

+ 1 - 2
src/ua_types_encoding_binary.c

@@ -856,8 +856,7 @@ UA_StatusCode UA_Variant_decodeBinary(UA_ByteString const *src, size_t *UA_RESTR
     /* array dimensions */
     if(isArray && (encodingByte & UA_VARIANT_ENCODINGMASKTYPE_DIMENSIONS)) {
         retval = UA_Int32_decodeBinary(src, offset, &dst->arrayDimensionsSize);
-
-        retval |= UA_Array_decodeBinary(src, offset, dst->arrayDimensionsSize, (void**)&dst->arrayDimensions,
+        retval |= UA_Array_decodeBinary(src, offset, dst->arrayDimensionsSize,(void**) &dst->arrayDimensions,
                                         &UA_TYPES[UA_TYPES_INT32]);
         if(retval != UA_STATUSCODE_GOOD) {
             dst->arrayDimensionsSize = -1;