mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 23:27:17 +00:00
webservices: Accept empty namespace in attribute type mapping.
Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
9d530346cc
commit
6d5eef9c94
|
@ -4343,9 +4343,24 @@ static HRESULT get_text( struct reader *reader, WS_TYPE_MAPPING mapping, const W
|
|||
{
|
||||
case WS_ATTRIBUTE_TYPE_MAPPING:
|
||||
{
|
||||
ULONG index;
|
||||
if (!(*found = find_attribute( reader, localname, ns, &index ))) return S_OK;
|
||||
return get_attribute_text( reader, index, ret );
|
||||
ULONG i;
|
||||
WS_XML_ELEMENT_NODE *elem = &reader->current->hdr;
|
||||
|
||||
*found = FALSE;
|
||||
for (i = 0; i < elem->attributeCount; i++)
|
||||
{
|
||||
const WS_XML_STRING *localname2 = elem->attributes[i]->localName;
|
||||
const WS_XML_STRING *ns2 = elem->attributes[i]->ns;
|
||||
|
||||
if (cmp_name( localname->bytes, localname->length, localname2->bytes, localname2->length )) continue;
|
||||
if (!ns->length || !cmp_name( ns->bytes, ns->length, ns2->bytes, ns2->length ))
|
||||
{
|
||||
*found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!*found) return S_OK;
|
||||
return get_attribute_text( reader, i, ret );
|
||||
}
|
||||
case WS_ELEMENT_TYPE_MAPPING:
|
||||
case WS_ELEMENT_CONTENT_TYPE_MAPPING:
|
||||
|
|
|
@ -2556,7 +2556,8 @@ static void test_cdata(void)
|
|||
static void test_WsFindAttribute(void)
|
||||
{
|
||||
static const char test[] = "<t attr='value' attr2='value2'></t>";
|
||||
WS_XML_STRING ns = {0, NULL}, localname = {4, (BYTE *)"attr"};
|
||||
static const char test2[] = "<p:t attr='value' p:attr2='value2' xmlns:p=\"ns\"></t>";
|
||||
WS_XML_STRING ns = {0, NULL}, ns2 = {2, (BYTE *)"ns"}, localname = {4, (BYTE *)"attr"};
|
||||
WS_XML_STRING localname2 = {5, (BYTE *)"attr2"}, localname3 = {5, (BYTE *)"attr3"};
|
||||
WS_XML_READER *reader;
|
||||
ULONG index;
|
||||
|
@ -2638,6 +2639,32 @@ static void test_WsFindAttribute(void)
|
|||
ok( hr == S_FALSE, "got %08x\n", hr );
|
||||
ok( index == ~0u, "got %u\n", index );
|
||||
|
||||
hr = set_input( reader, test2, sizeof(test2) - 1 );
|
||||
ok( hr == S_OK, "got %08x\n", hr );
|
||||
|
||||
hr = WsReadNode( reader, NULL );
|
||||
ok( hr == S_OK, "got %08x\n", hr );
|
||||
|
||||
index = 0xdeadbeef;
|
||||
hr = WsFindAttribute( reader, &localname, &ns, TRUE, &index, NULL );
|
||||
ok( hr == S_OK, "got %08x\n", hr );
|
||||
ok( !index, "got %u\n", index );
|
||||
|
||||
hr = WsFindAttribute( reader, &localname2, &ns2, TRUE, &index, NULL );
|
||||
ok( hr == S_OK, "got %08x\n", hr );
|
||||
|
||||
hr = WsFindAttribute( reader, &localname2, &ns, TRUE, &index, NULL );
|
||||
ok( hr == WS_E_INVALID_FORMAT, "got %08x\n", hr );
|
||||
|
||||
hr = set_input( reader, test2, sizeof(test2) - 1 );
|
||||
ok( hr == S_OK, "got %08x\n", hr );
|
||||
|
||||
hr = WsReadNode( reader, NULL );
|
||||
ok( hr == S_OK, "got %08x\n", hr );
|
||||
|
||||
hr = WsFindAttribute( reader, &localname, &ns2, TRUE, &index, NULL );
|
||||
ok( hr == WS_E_INVALID_FORMAT, "got %08x\n", hr );
|
||||
|
||||
WsFreeReader( reader );
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue