Browse Source

NodeSet: Avoid encoding dimensions in simple array variants (#1978)

Arrigo Zanette 6 years ago
parent
commit
a1eb78b451
1 changed files with 5 additions and 1 deletions
  1. 5 1
      tools/nodeset_compiler/backend_open62541_nodes.py

+ 5 - 1
tools/nodeset_compiler/backend_open62541_nodes.py

@@ -116,7 +116,11 @@ def generateVariableNodeCode(node, nodeset, encode_binary_size):
                     code += code1
                     codeCleanup += codeCleanup1
                     codeGlobal += codeGlobal1
-                    if node.valueRank > 0 and len(node.arrayDimensions) == node.valueRank:
+                    # #1978 Variant arrayDimensions are only required to properly decode multidimensional arrays
+                    # (valueRank >= 2) from data stored as one-dimensional array of arrayLength elements.
+                    # One-dimensional arrays are already completely defined by arraylength attribute so setting
+                    # also arrayDimensions, even if not explicitly forbidden, can confuse clients
+                    if node.valueRank > 1 and len(node.arrayDimensions) == node.valueRank:
                         code.append("attr.value.arrayDimensionsSize = attr.arrayDimensionsSize;")
                         code.append("attr.value.arrayDimensions = attr.arrayDimensions;")
                 else: