Module: wine Branch: master Commit: 8966cfe42ad09c5bf7c3792ce1df6af1d2c283f8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8966cfe42ad09c5bf7c3792ce1...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 26 20:45:09 2007 +0200
mshtml: Ignore app's User-Agent header and Content-Type if there is no data to post.
---
dlls/mshtml/persist.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 53 insertions(+), 1 deletions(-)
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index 9f74c91..abee743 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -39,6 +39,54 @@
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
+#define USER_AGENT "User-Agent:" +#define CONTENT_TYPE "Content-Type:" + +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; + } + + if(ptr) { + const char *ptr2; + + FIXME("Ignoring User-Agent header\n"); + + ptr2 = strstr(ptr, "\r\n"); + if(ptr2) + 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; + + TRACE("Ignoring Content-Type header\n"); + + ptr2 = strstr(ptr, "\r\n"); + if(ptr2) + memmove(ptr, ptr2, strlen(ptr2)+1); + } + } + + return strlen(buf); +} + static nsIInputStream *get_post_data_stream(IBindCtx *bctx) { nsIInputStream *ret = NULL; @@ -84,7 +132,7 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx) post_len = bindinfo.cbstgmedData;
if(headers_len || post_len) { - int len = headers_len ? headers_len-1 : 0; + int len = 0;
static const char content_length[] = "Content-Length: %u\r\n\r\n";
@@ -93,9 +141,13 @@ static nsIInputStream *get_post_data_stream(IBindCtx *bctx) if(headers_len) { WideCharToMultiByte(CP_ACP, 0, headers, -1, data, -1, NULL, NULL); CoTaskMemFree(headers); + len = fix_headers(data, post_len); }
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);