diff --git a/src/util/nodeset_loader/ua_nodeset_loader_apply.c b/src/util/nodeset_loader/ua_nodeset_loader_apply.c index 02e49450d..2dde27149 100644 --- a/src/util/nodeset_loader/ua_nodeset_loader_apply.c +++ b/src/util/nodeset_loader/ua_nodeset_loader_apply.c @@ -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, diff --git a/tests/nodeset-loader/check_nodeset_loader_input.c b/tests/nodeset-loader/check_nodeset_loader_input.c index 38e3517c6..bd182bd08 100644 --- a/tests/nodeset-loader/check_nodeset_loader_input.c +++ b/tests/nodeset-loader/check_nodeset_loader_input.c @@ -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[] = { + ("" + "12x" + "i=85" + "i=63" + ""), + ("" + "12x" + "i=63" + "") + }; + 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; }