Jacek Caban : mshtml: Improve header parsing.
Alexandre Julliard
julliard at winehq.org
Wed Mar 12 06:44:16 CDT 2008
Module: wine
Branch: master
Commit: d4cff191b2902e4ee499f949a8ac0780240f9530
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d4cff191b2902e4ee499f949a8ac0780240f9530
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Mar 11 22:28:21 2008 +0100
mshtml: Improve header parsing.
---
dlls/mshtml/persist.c | 54 ++++++++++++++----------------------------------
1 files changed, 16 insertions(+), 38 deletions(-)
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 8a629d7..8c0cb3b 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -44,47 +44,27 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
static int fix_headers(char *buf, DWORD post_len)
{
- char *ptr = NULL;
-
- if(!strncasecmp(USER_AGENT, buf, sizeof(USER_AGENT)-1)) {
- ptr = buf;
- }else {
- ptr = strstr(buf, "\r\n" USER_AGENT);
- if(ptr)
- ptr += 2;
- }
+ char *ptr = buf, *ptr2;
- if(ptr) {
- const char *ptr2;
+ while(*ptr && (ptr[0] != '\r' || ptr[1] != '\n')) {
+ for(ptr2=ptr+1; *ptr2 && (ptr2[0] != '\r' || ptr2[1] != '\n'); ptr2++);
- FIXME("Ignoring User-Agent header\n");
+ if(*ptr2)
+ ptr2 += 2;
- ptr2 = strstr(ptr, "\r\n");
- if(ptr2)
+ if(!strncasecmp(ptr, USER_AGENT, sizeof(USER_AGENT)-1)) {
+ FIXME("Ignoring User-Agent header\n");
memmove(ptr, ptr2, strlen(ptr2)+1);
- }
-
- if(!post_len) {
- if(!strncasecmp(CONTENT_TYPE, buf, sizeof(CONTENT_TYPE)-1)) {
- ptr = buf;
- }else {
- ptr = strstr(buf, "\r\n" CONTENT_TYPE);
- if(ptr)
- ptr += 2;
- }
-
- if(ptr) {
- const char *ptr2;
-
+ }else if(!post_len && !strncasecmp(ptr, CONTENT_TYPE, sizeof(CONTENT_TYPE)-1)) {
TRACE("Ignoring Content-Type header\n");
-
- ptr2 = strstr(ptr, "\r\n");
- if(ptr2)
- memmove(ptr, ptr2, strlen(ptr2)+1);
+ memmove(ptr, ptr2, strlen(ptr2)+1);
+ }else {
+ ptr = ptr2;
}
}
- return strlen(buf);
+ *ptr = 0;
+ return ptr-buf;
}
static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
@@ -159,18 +139,16 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx)
}
if(post_len) {
- if(len >= 4 && !strcmp(data+len-4, "\r\n\r\n"))
- len -= 2;
-
sprintf(data+len, content_length, post_len);
- len = strlen(data);
+ len += strlen(data+len);
memcpy(data+len, bindinfo.stgmedData.u.hGlobal, post_len);
}
TRACE("data = %s\n", debugstr_an(data, len+post_len));
- ret = create_nsstream(data, len+post_len);
+ if(len)
+ ret = create_nsstream(data, len+post_len);
}
CoTaskMemFree(headers);
More information about the wine-cvs
mailing list