diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 35f87dd2d16..990401a657e 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -886,7 +886,7 @@ static HRESULT read_post_data_stream(nsChannelBSC *This, nsChannel *nschannel) if(NS_FAILED(nsres)) return E_FAIL; - post_data = data = GlobalAlloc(0, available+1); + post_data = data = GlobalAlloc(0, available); if(!data) return E_OUTOFMEMORY; @@ -896,21 +896,22 @@ static HRESULT read_post_data_stream(nsChannelBSC *This, nsChannel *nschannel) return E_FAIL; } - data[data_len++] = 0; - if(nschannel->post_data_contains_headers) { - if(data[0] == '\r' && data[1] == '\n') { + if(data_len >= 2 && data[0] == '\r' && data[1] == '\n') { post_data = data+2; data_len -= 2; }else { WCHAR *headers; DWORD size; + char *ptr; - post_data = strstr(data, "\r\n\r\n"); - if(post_data) - post_data += 4; - else - post_data = data+data_len; + post_data += data_len; + for(ptr = data; ptr+4 < data+data_len; ptr++) { + if(!memcmp(ptr, "\r\n\r\n", 4)) { + post_data = ptr+4; + break; + } + } data_len -= post_data-data;