mirror of
https://github.com/open62541/open62541.git
synced 2026-10-28 04:29:55 +08:00
fix(nodeset): reject nodes with malformed initial values
This commit is contained in:
committed by
Julius Pfrommer
parent
0684d6df88
commit
438cbc4331
@@ -246,7 +246,7 @@ handleVariableNode(NodeSet *nodeset, const NL_VariableNode *node, UA_NodeId pare
|
||||
ret = decodeVariableValue(nodeset, (const NL_Node *)node, &node->value, &attr.dataType,
|
||||
attr.valueRank, attr.arrayDimensionsSize, attr.arrayDimensions,
|
||||
&attr.value);
|
||||
if(ret == UA_STATUSCODE_BADOUTOFMEMORY)
|
||||
if(ret != UA_STATUSCODE_GOOD)
|
||||
goto cleanup;
|
||||
#else
|
||||
UA_LOG_WARNING(nodeset->logger, UA_LOGCATEGORY_SERVER,
|
||||
@@ -328,7 +328,7 @@ handleVariableTypeNode(NodeSet *nodeset, const NL_VariableTypeNode *node, UA_Nod
|
||||
ret = decodeVariableValue(nodeset, (const NL_Node *)node, &node->value, &attr.dataType,
|
||||
attr.valueRank, attr.arrayDimensionsSize, attr.arrayDimensions,
|
||||
&attr.value);
|
||||
if(ret == UA_STATUSCODE_BADOUTOFMEMORY)
|
||||
if(ret != UA_STATUSCODE_GOOD)
|
||||
goto cleanup;
|
||||
#else
|
||||
UA_LOG_WARNING(nodeset->logger, UA_LOGCATEGORY_SERVER,
|
||||
|
||||
@@ -506,6 +506,28 @@ START_TEST(Server_rejectNegativeUnsignedInitialValue) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(Server_rejectMalformedInitialValue) {
|
||||
/* A malformed supplied value must not become a default value, even when
|
||||
* defaults are allowed for variables that omit their initial value. */
|
||||
UA_Server_getConfig(server)->allowEmptyVariables = UA_RULEHANDLING_DEFAULT;
|
||||
static const char *const nodes[] = {
|
||||
("<UAVariable NodeId=\"ns=1;i=1\" BrowseName=\"1:InvalidValue\" DataType=\"i=6\">"
|
||||
"<Value><Int32>12x</Int32></Value><References>"
|
||||
"<Reference ReferenceType=\"i=35\" IsForward=\"false\">i=85</Reference>"
|
||||
"<Reference ReferenceType=\"i=40\">i=63</Reference>"
|
||||
"</References></UAVariable>"),
|
||||
("<UAVariableType NodeId=\"ns=1;i=1\" BrowseName=\"1:InvalidValue\" DataType=\"i=6\">"
|
||||
"<Value><Int32>12x</Int32></Value><References>"
|
||||
"<Reference ReferenceType=\"i=45\" IsForward=\"false\">i=63</Reference>"
|
||||
"</References></UAVariableType>")
|
||||
};
|
||||
UA_UInt16 nsIndex = loadValidationNodes(nodes[_i]);
|
||||
UA_NodeClass nodeClass = UA_NODECLASS_UNSPECIFIED;
|
||||
ck_assert_uint_eq(UA_Server_readNodeClass(server,
|
||||
UA_NODEID_NUMERIC(nsIndex, 1), &nodeClass), UA_STATUSCODE_BADNODEIDUNKNOWN);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
static Suite *
|
||||
testSuite_Client(void) {
|
||||
Suite *s = suite_create("Server Nodeset Loader");
|
||||
@@ -528,6 +550,7 @@ testSuite_Client(void) {
|
||||
tcase_add_test(tc_validation, Server_rejectUnresolvableDataTypeDefinitions);
|
||||
tcase_add_loop_test(tc_validation, Server_validateDataTypeFieldLimits, 0, 4);
|
||||
tcase_add_loop_test(tc_validation, Server_rejectNegativeUnsignedInitialValue, 0, 2);
|
||||
tcase_add_loop_test(tc_validation, Server_rejectMalformedInitialValue, 0, 2);
|
||||
suite_add_tcase(s, tc_validation);
|
||||
return s;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user