msxml3: Fix status text value parsing
Nikolay Sivov
nsivov at codeweavers.com
Mon Jun 11 04:00:11 CDT 2012
The problem is that I can't parse backwards cause status text itself can
contain spaces. This results in wrong text passed to application like
"Found" instead of "Not Found".
-------------- next part --------------
>From 34abecd2e825b1933faacd2b600f26bb46059d15 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sun, 10 Jun 2012 00:48:09 +0400
Subject: [PATCH 4/5] Fix status text value parsing
---
dlls/msxml3/httprequest.c | 35 ++++++++++++++++++-----------------
1 files changed, 18 insertions(+), 17 deletions(-)
diff --git a/dlls/msxml3/httprequest.c b/dlls/msxml3/httprequest.c
index 0abe2ff..ea5fb14 100644
--- a/dlls/msxml3/httprequest.c
+++ b/dlls/msxml3/httprequest.c
@@ -540,31 +540,32 @@ static HRESULT WINAPI BSCHttpNegotiate_OnResponse(IHttpNegotiate *iface, DWORD c
This->request->status_text = NULL;
if (resp_headers)
{
- const WCHAR *ptr, *line;
+ const WCHAR *ptr, *line, *status_text;
ptr = line = resp_headers;
- /* skip status line */
- while (*ptr)
+ /* skip HTTP-Version */
+ ptr = strchrW(ptr, ' ');
+ if (ptr)
{
- if (*ptr == '\r' && *(ptr+1) == '\n')
+ /* skip Status-Code */
+ ptr = strchrW(++ptr, ' ');
+ if (ptr)
{
- const WCHAR *end = ptr-1;
- line = ptr + 2;
- /* scan back to get status phrase */
- while (ptr > resp_headers)
+ status_text = ++ptr;
+ /* now it supposed to end with CRLF */
+ while (*ptr)
{
- if (*ptr == ' ')
- {
- This->request->status_text = SysAllocStringLen(ptr+1, end-ptr);
- TRACE("status text %s\n", debugstr_w(This->request->status_text));
- break;
- }
- ptr--;
+ if (*ptr == '\r' && *(ptr+1) == '\n')
+ {
+ line = ptr + 2;
+ This->request->status_text = SysAllocStringLen(status_text, ptr-status_text);
+ TRACE("status text %s\n", debugstr_w(This->request->status_text));
+ break;
+ }
+ ptr++;
}
- break;
}
- ptr++;
}
/* store as unparsed string for now */
--
1.5.6.5
More information about the wine-patches
mailing list