Nikolay Sivov : xmllite: Fix overwriting of dest buffer when pushing more data to it.

Alexandre Julliard julliard at winehq.org
Wed Oct 9 14:22:14 CDT 2013


Module: wine
Branch: master
Commit: feda40bbaab360edd09b1a36d75a52894b91bde6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=feda40bbaab360edd09b1a36d75a52894b91bde6

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Oct  9 15:38:02 2013 +0400

xmllite: Fix overwriting of dest buffer when pushing more data to it.

---

 dlls/xmllite/reader.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c
index ad6544b..ebea0b4 100644
--- a/dlls/xmllite/reader.c
+++ b/dlls/xmllite/reader.c
@@ -703,7 +703,7 @@ static HRESULT readerinput_growraw(xmlreaderinput *readerinput)
 
     read = 0;
     hr = ISequentialStream_Read(readerinput->stream, buffer->data + buffer->written, len, &read);
-    TRACE("requested %d, read %d, ret 0x%08x\n", len, read, hr);
+    TRACE("written=%d, alloc=%d, requested=%d, read=%d, ret=0x%08x\n", buffer->written, buffer->allocated, len, read, hr);
     readerinput->pending = hr == E_PENDING;
     if (FAILED(hr)) return hr;
     buffer->written += read;
@@ -903,14 +903,14 @@ static HRESULT reader_more(xmlreader *reader)
     if (cp == ~0)
     {
         readerinput_grow(readerinput, len);
-        memcpy(dest->data, src->data + src->cur, len);
+        memcpy(dest->data + dest->written, src->data + src->cur, len);
         dest->written += len*sizeof(WCHAR);
         return hr;
     }
 
     dest_len = MultiByteToWideChar(cp, 0, src->data + src->cur, len, NULL, 0);
     readerinput_grow(readerinput, dest_len);
-    ptr = (WCHAR*)dest->data;
+    ptr = (WCHAR*)(dest->data + dest->written);
     MultiByteToWideChar(cp, 0, src->data + src->cur, len, ptr, dest_len);
     ptr[dest_len] = 0;
     dest->written += dest_len*sizeof(WCHAR);
@@ -930,7 +930,7 @@ static inline WCHAR *reader_get_ptr(xmlreader *reader)
     encoded_buffer *buffer = &reader->input->buffer->utf16;
     WCHAR *ptr = (WCHAR*)buffer->data + buffer->cur;
     if (!*ptr) reader_more(reader);
-    return ptr;
+    return (WCHAR*)buffer->data + buffer->cur;
 }
 
 static int reader_cmp(xmlreader *reader, const WCHAR *str)




More information about the wine-cvs mailing list