diff --git a/dlls/xmllite/reader.c b/dlls/xmllite/reader.c index 7c9f76a4f15..c33d9bf2398 100644 --- a/dlls/xmllite/reader.c +++ b/dlls/xmllite/reader.c @@ -2122,6 +2122,7 @@ static HRESULT reader_parse_reference(xmlreader *reader) len = buffer->written - ((char*)ptr - buffer->data) - sizeof(WCHAR); memmove(start+1, ptr+1, len); buffer->cur = cur + 1; + buffer->written -= (ptr - start) * sizeof(WCHAR); *start = ch; } diff --git a/dlls/xmllite/tests/reader.c b/dlls/xmllite/tests/reader.c index c7108945a92..47192f9a189 100644 --- a/dlls/xmllite/tests/reader.c +++ b/dlls/xmllite/tests/reader.c @@ -2241,8 +2241,8 @@ static void test_namespaceuri(void) static void test_read_charref(void) { - static const char testA[] = "dză"; - static const WCHAR chardataW[] = {0x01f3,0x0103,0}; + static const char testA[] = "dză>"; + static const WCHAR chardataW[] = {0x01f3,0x0103,'>',0}; const WCHAR *value; IXmlReader *reader; XmlNodeType type; @@ -2252,7 +2252,7 @@ static void test_read_charref(void) hr = CreateXmlReader(&IID_IXmlReader, (void **)&reader, NULL); ok(hr == S_OK, "S_OK, got %08x\n", hr); - stream = create_stream_on_data(testA, sizeof(testA)); + stream = create_stream_on_data(testA, sizeof(testA)-1); hr = IXmlReader_SetInput(reader, (IUnknown *)stream); ok(hr == S_OK, "got %08x\n", hr); @@ -2272,6 +2272,10 @@ static void test_read_charref(void) ok(hr == S_OK, "got %08x\n", hr); ok(type == XmlNodeType_EndElement, "Unexpected node type %d\n", type); + hr = IXmlReader_Read(reader, &type); + ok(hr == S_FALSE, "got %08x\n", hr); + ok(type == XmlNodeType_None, "Unexpected node type %d\n", type); + IXmlReader_Release(reader); IStream_Release(stream); }