Module: wine Branch: master Commit: 0238d470316a7ee60abe695fef089580464b4891 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0238d470316a7ee60abe695fef...
Author: Sebastian Lackner sebastian@fds-team.de Date: Wed Aug 31 21:09:04 2016 +0200
webservices: Fix handling of duplicate headers in WsRemoveCustomHeader.
Signed-off-by: Sebastian Lackner sebastian@fds-team.de Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/webservices/msg.c | 2 +- dlls/webservices/tests/msg.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/dlls/webservices/msg.c b/dlls/webservices/msg.c index 01b6625..6fcd046 100644 --- a/dlls/webservices/msg.c +++ b/dlls/webservices/msg.c @@ -1062,7 +1062,7 @@ HRESULT WINAPI WsRemoveCustomHeader( WS_MESSAGE *handle, const WS_XML_STRING *na { remove_header( msg, i ); removed = TRUE; - break; + i--; } }
diff --git a/dlls/webservices/tests/msg.c b/dlls/webservices/tests/msg.c index b78c52e..5d0901e 100644 --- a/dlls/webservices/tests/msg.c +++ b/dlls/webservices/tests/msg.c @@ -839,8 +839,15 @@ static void test_WsRemoveCustomHeader(void) "xmlns:s="http://www.w3.org/2003/05/soap-envelope%5C%22%3E<s:Header>" "<a:MessageID>urn:uuid:00000000-0000-0000-0000-000000000000</a:MessageID>" "</s:Header><s:Body/></s:Envelope>"; + static const char expected3[] = + "<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing%5C" " + "xmlns:s="http://www.w3.org/2003/05/soap-envelope%5C%22%3E<s:Header>" + "<a:MessageID>urn:uuid:00000000-0000-0000-0000-000000000000</a:MessageID>" + "<test xmlns="ns">value</test><test xmlns="ns">value2</test>" + "</s:Header><s:Body/></s:Envelope>"; static WS_XML_STRING localname = {4, (BYTE *)"test"}, ns = {2, (BYTE *)"ns"}; static const WS_XML_STRING value = {5, (BYTE *)"value"}; + static const WS_XML_STRING value2 = {6, (BYTE *)"value2"}; HRESULT hr; WS_MESSAGE *msg; WS_ELEMENT_DESCRIPTION desc; @@ -866,6 +873,10 @@ static void test_WsRemoveCustomHeader(void) ok( hr == S_OK, "got %08x\n", hr ); check_output_header( msg, expected, -1, strstr(expected, "urn:uuid:") - expected, 46, __LINE__ );
+ hr = WsAddCustomHeader( msg, &desc, WS_WRITE_REQUIRED_VALUE, &value2, sizeof(value2), 0, NULL ); + ok( hr == S_OK, "got %08x\n", hr ); + check_output_header( msg, expected3, -1, strstr(expected3, "urn:uuid:") - expected3, 46, __LINE__ ); + hr = WsRemoveCustomHeader( msg, NULL, NULL, NULL ); ok( hr == E_INVALIDARG, "got %08x\n", hr );