opcservices: Improve parameter validation in CreateRelationship().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
6878cbf51c
commit
65aa7242d2
|
@ -1301,13 +1301,23 @@ static HRESULT WINAPI opc_relationship_set_CreateRelationship(IOpcRelationshipSe
|
||||||
const WCHAR *type, IUri *target_uri, OPC_URI_TARGET_MODE target_mode, IOpcRelationship **relationship)
|
const WCHAR *type, IUri *target_uri, OPC_URI_TARGET_MODE target_mode, IOpcRelationship **relationship)
|
||||||
{
|
{
|
||||||
struct opc_relationship_set *relationship_set = impl_from_IOpcRelationshipSet(iface);
|
struct opc_relationship_set *relationship_set = impl_from_IOpcRelationshipSet(iface);
|
||||||
|
DWORD length;
|
||||||
|
|
||||||
TRACE("iface %p, id %s, type %s, target_uri %p, target_mode %d, relationship %p.\n", iface, debugstr_w(id),
|
TRACE("iface %p, id %s, type %s, target_uri %p, target_mode %d, relationship %p.\n", iface, debugstr_w(id),
|
||||||
debugstr_w(type), target_uri, target_mode, relationship);
|
debugstr_w(type), target_uri, target_mode, relationship);
|
||||||
|
|
||||||
|
if (!relationship)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
|
*relationship = NULL;
|
||||||
|
|
||||||
if (!type || !target_uri)
|
if (!type || !target_uri)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
||||||
|
if (IUri_GetPropertyLength(target_uri, Uri_PROPERTY_SCHEME_NAME, &length, 0) == S_OK && length != 0
|
||||||
|
&& target_mode == OPC_URI_TARGET_MODE_INTERNAL)
|
||||||
|
return OPC_E_INVALID_RELATIONSHIP_TARGET;
|
||||||
|
|
||||||
return opc_relationship_create(relationship_set, id, type, target_uri, target_mode, relationship);
|
return opc_relationship_create(relationship_set, id, type, target_uri, target_mode, relationship);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -362,21 +362,24 @@ static void test_relationship(void)
|
||||||
hr = IOpcPackage_GetRelationshipSet(package, &rels);
|
hr = IOpcPackage_GetRelationshipSet(package, &rels);
|
||||||
ok(SUCCEEDED(hr), "Failed to get part set, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get part set, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
rel = (void *)0xdeadbeef;
|
||||||
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, NULL, NULL, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, NULL, NULL, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
||||||
ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
|
ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(rel == NULL, "Unexpected instance %p.\n", rel);
|
||||||
|
|
||||||
|
rel = (void *)0xdeadbeef;
|
||||||
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, typeW, NULL, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, typeW, NULL, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
||||||
ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
|
ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(rel == NULL, "Unexpected instance %p.\n", rel);
|
||||||
|
|
||||||
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, NULL, target_uri, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, NULL, target_uri, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
||||||
ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
|
ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
/* Absolute target uri with internal mode */
|
/* Absolute target uri with internal mode */
|
||||||
|
rel = (void *)0xdeadbeef;
|
||||||
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, typeW, target_uri2, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, typeW, target_uri2, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
||||||
todo_wine
|
|
||||||
ok(hr == OPC_E_INVALID_RELATIONSHIP_TARGET, "Unexpected hr %#x.\n", hr);
|
ok(hr == OPC_E_INVALID_RELATIONSHIP_TARGET, "Unexpected hr %#x.\n", hr);
|
||||||
if (hr == S_OK)
|
ok(rel == NULL, "Unexpected instance %p.\n", rel);
|
||||||
IOpcRelationship_Release(rel);
|
|
||||||
|
|
||||||
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, typeW, target_uri, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
hr = IOpcRelationshipSet_CreateRelationship(rels, NULL, typeW, target_uri, OPC_URI_TARGET_MODE_INTERNAL, &rel);
|
||||||
ok(SUCCEEDED(hr), "Failed to create relationship, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to create relationship, hr %#x.\n", hr);
|
||||||
|
|
Loading…
Reference in New Issue