View Issue Details

IDProjectCategoryView StatusLast Update
001049510000-003: Address SpaceSpecpublic2025-09-15 07:17
ReporterMark Clemens Assigned ToRandy Armstrong  
PrioritynormalSeveritymajorReproducibilityalways
Status feedbackResolutionreopened 
Product Version1.05.00 
Summary0010495: OPC UA Part 3 conflicts with OPC UA part 6 in regard to ArrayDimensions - potentially leading to ua binary client decoding error
Description

https://reference.opcfoundation.org/Core/Part3/v105/docs/5.6.2 states for ArrayDimensions:

"This Attribute specifies the maximum supported length of each dimension. If the maximum is unknown the value shall be 0."


https://reference.opcfoundation.org/Core/Part3/v105/docs/5.6.2 states for ArrayDimensions:

"The length of each dimension encoded as a sequence of Int32 values

This field is only present if the ArrayDimensions flag is set in the encoding mask. The lower rank dimensions appear first in the array.

All dimensions shall be specified and shall be greater than zero..
If ArrayDimensions are inconsistent with the ArrayLength then the decoder shall stop and raise a Bad_DecodingError."


An OPC UA server shall use value 0 for the dimension if the maximum is unknown
An OPC UA binary client shall refuse value 0 for the dimension

This results in (real-life) conflicts / interoperability issues between OPC UA server and OPC UA client

TagsNo tags attached.
Commit Version
Fix Due Date

Activities

Randy Armstrong

2025-09-12 15:17

administrator   ~0023275

Part 3 describes the maximum possible dimensions.

Part 6 describes the actual dimensions for the value encoded on the wire.

There are not supposed to be the same.

Matthias Damm

2025-09-15 07:17

developer   ~0023276

The inconsistency is in Part 6 in Table 25 – Variant Binary DataEncoding between ArrayLength and ArrayDimensions description.

ArrayLength defines:
If one or more dimensions has a length <= 0 then the ArrayLength is 0.

ArrayDimensions defines:
All dimensions shall be specified and shall be greater than zero..

Even for a NULL multidimensional array we want to preserve the number of dimensions.

I think ArrayDimensions must be changed to
"All dimensions shall be specified. All dimensions shall be greater than zero if ArrayLength is greater than zero."

This is consistent with "Table 27 – Inline Matrix DataEncoding" where the dimensions are encoded but could be 0 for a null array.
Dimensions
The length of each dimension.
If any dimension has a length <= 0, then no values are encoded.
The number of dimensions shall be at least 2.

Issue History

Date Modified Username Field Change
2025-09-12 15:14 Mark Clemens New Issue
2025-09-12 15:17 Randy Armstrong Assigned To => Randy Armstrong
2025-09-12 15:17 Randy Armstrong Status new => resolved
2025-09-12 15:17 Randy Armstrong Resolution open => no change required
2025-09-12 15:17 Randy Armstrong Note Added: 0023275
2025-09-15 07:17 Matthias Damm Status resolved => feedback
2025-09-15 07:17 Matthias Damm Resolution no change required => reopened
2025-09-15 07:17 Matthias Damm Note Added: 0023276