Преглед изворни кода

Missing _init in decodebinary; realloc too small for parserange

Julius Pfrommer пре 9 година
родитељ
комит
a9141f2994
2 измењених фајлова са 2 додато и 2 уклоњено
  1. 1 2
      src/server/ua_services_attribute.c
  2. 1 0
      src/ua_types_encoding_binary.c

+ 1 - 2
src/server/ua_services_attribute.c

@@ -51,7 +51,7 @@ UA_StatusCode parse_numericrange(const UA_String *str, UA_NumericRange *range) {
     do {
         /* alloc dimensions */
         if(index >= (UA_Int32)dimensionsMax) {
-            struct UA_NumericRangeDimension *newds = UA_realloc(dimensions, dimensionsMax + 2);
+            struct UA_NumericRangeDimension *newds = UA_realloc(dimensions, sizeof(struct UA_NumericRangeDimension) * (dimensionsMax + 2));
             if(!newds) {
                 retval = UA_STATUSCODE_BADOUTOFMEMORY;
                 break;
@@ -535,7 +535,6 @@ MoveValueIntoNode(UA_Server *server, UA_Session *session, UA_VariableNode *node,
     if(node->value.variant.callback.onWrite)
         node->value.variant.callback.onWrite(node->value.variant.callback.handle, node->nodeId,
                                              &node->value.variant.value, rangeptr);
-
     if(rangeptr)
         UA_free(range.dimensions);
     return retval;

+ 1 - 0
src/ua_types_encoding_binary.c

@@ -1036,6 +1036,7 @@ UA_StatusCode UA_decodeBinary(const UA_ByteString *src, size_t *UA_RESTRICT offs
         return UA_DiagnosticInfo_decodeBinary(src, offset, (UA_DiagnosticInfo*)dst);
     }
 
+    UA_init(dst, dataType);
     /* structured types */
     uintptr_t ptr = (uintptr_t) dst;
     UA_StatusCode retval = UA_STATUSCODE_GOOD;