Jacek Caban : mshtml: Don't add null byte to post data.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Feb 27 09:32:58 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 71b881e4ba75bd2cccde863e55cdd4189d946c35
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=71b881e4ba75bd2cccde863e55cdd4189d946c35

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Feb 24 20:29:37 2006 +0100

mshtml: Don't add null byte to post data.

---

 dlls/mshtml/navigate.c |   21 ++++++++++-----------
 dlls/mshtml/persist.c  |   10 +++++-----
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index c1cd9f6..eb64656 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -399,7 +399,7 @@ static void parse_post_data(nsIInputStre
     HGLOBAL post_data = NULL;
     LPWSTR headers = NULL;
     DWORD headers_len = 0, len;
-    const char *ptr, *ptr2;
+    const char *ptr, *ptr2, *post_data_end;
 
     nsIInputStream_Available(post_data_stream, &available);
     post_data = GlobalAlloc(0, available+1);
@@ -408,9 +408,10 @@ static void parse_post_data(nsIInputStre
     TRACE("post_data = %s\n", debugstr_an(post_data, post_data_len));
 
     ptr = ptr2 = post_data;
+    post_data_end = (const char*)post_data+post_data_len;
 
-    while(*ptr && (*ptr != '\r' || ptr[1] != '\n')) {
-        while(*ptr && (*ptr != '\r' || ptr[1] != '\n'))
+    while(ptr < post_data_end && (*ptr != '\r' || ptr[1] != '\n')) {
+        while(ptr < post_data_end && (*ptr != '\r' || ptr[1] != '\n'))
             ptr++;
 
         if(!*ptr) {
@@ -445,24 +446,21 @@ static void parse_post_data(nsIInputStre
     headers[headers_len] = 0;
     *headers_ret = headers;
 
-    if(*ptr)
-        ptr += 2;
-
-    if(!*ptr || !(ptr-(const char*)post_data)) {
+    if(ptr >= post_data_end-2) {
         GlobalFree(post_data);
         return;
     }
 
+    ptr += 2;
+
     if(headers_len) {
         post_data_len -= ptr-(const char*)post_data;
         memmove(post_data, ptr, post_data_len);
         post_data = GlobalReAlloc(post_data, post_data_len+1, 0);
     }
 
-    *((PBYTE)post_data+post_data_len) = 0;
-
     *post_data_ret = post_data;
-    *post_data_len_ret = post_data_len+1;
+    *post_data_len_ret = post_data_len;
 }
 
 void hlink_frame_navigate(NSContainer *container, IHlinkFrame *hlink_frame,
@@ -478,7 +476,8 @@ void hlink_frame_navigate(NSContainer *c
 
     if(post_data_stream) {
         parse_post_data(post_data_stream, &headers, &post_data, &post_data_len);
-        TRACE("headers = %s post_data = %s\n", debugstr_w(headers), debugstr_a(post_data));
+        TRACE("headers = %s post_data = %s\n", debugstr_w(headers),
+              debugstr_an(post_data, post_data_len));
     }
 
     callback = BSCallback_Create(container->doc, uri, post_data, post_data_len, headers);
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 7649ee6..6f181a6 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -332,10 +332,10 @@ static nsIInputStream *get_post_data_str
     hres = IBindStatusCallback_GetBindInfo(callback, &bindf, &bindinfo);
 
     if(SUCCEEDED(hres) && bindinfo.dwBindVerb == BINDVERB_POST)
-        post_len = bindinfo.cbStgmedData-1;
+        post_len = bindinfo.cbStgmedData;
 
     if(headers_len || post_len) {
-        int len = headers_len;
+        int len = headers_len ? headers_len-1 : 0;
 
         static const char content_length[] = "Content-Length: %lu\r\n\r\n";
 
@@ -347,7 +347,7 @@ static nsIInputStream *get_post_data_str
         }
 
         if(post_len) {
-            sprintf(data+headers_len-1, content_length, post_len);
+            sprintf(data+len, content_length, post_len);
             len = strlen(data);
 
             memcpy(data+len, bindinfo.stgmedData.u.hGlobal, post_len);
@@ -355,7 +355,7 @@ static nsIInputStream *get_post_data_str
 
         TRACE("data = %s\n", debugstr_an(data, len+post_len));
 
-        ret = create_nsstream(data, strlen(data));
+        ret = create_nsstream(data, len+post_len);
     }
 
     ReleaseBindInfo(&bindinfo);
@@ -438,7 +438,7 @@ static HRESULT WINAPI PersistMoniker_Loa
          * it (to do so we'd have to use not frozen interfaces)?
          */
 
-        nsIInputStream *post_data_stream = get_post_data_stream(pibc);;
+        nsIInputStream *post_data_stream = get_post_data_stream(pibc);
 
         This->nscontainer->load_call = TRUE;
         nsres = nsIWebNavigation_LoadURI(This->nscontainer->navigation, url,




More information about the wine-cvs mailing list