Module: wine Branch: master Commit: 1cb6fa5e846e17e9c1b10f95a5b584f2e374299b URL: http://source.winehq.org/git/wine.git/?a=commit;h=1cb6fa5e846e17e9c1b10f95a5...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Mar 24 10:41:25 2016 +0300
xmllite/writer: Fix a bunch of Write* methods to set closed state.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/xmllite/tests/writer.c | 57 +++++++++++++++++++++++++++++++++++++++++++-- dlls/xmllite/writer.c | 8 +++++++ 2 files changed, 63 insertions(+), 2 deletions(-)
diff --git a/dlls/xmllite/tests/writer.c b/dlls/xmllite/tests/writer.c index cb379fe..7a958b3 100644 --- a/dlls/xmllite/tests/writer.c +++ b/dlls/xmllite/tests/writer.c @@ -918,23 +918,76 @@ static void test_writer_state(void) /* initial state */ check_writer_state(writer, E_UNEXPECTED);
- /* set output and call 'wrong' method */ + /* set output and call 'wrong' method, WriteEndElement */ stream = writer_set_output(writer);
hr = IXmlWriter_WriteEndElement(writer); ok(hr == WR_E_INVALIDACTION, "got 0x%08x\n", hr);
check_writer_state(writer, WR_E_INVALIDACTION); - IStream_Release(stream);
+ /* WriteAttributeString */ stream = writer_set_output(writer);
hr = IXmlWriter_WriteAttributeString(writer, NULL, aW, NULL, aW); ok(hr == WR_E_INVALIDACTION, "got 0x%08x\n", hr);
check_writer_state(writer, WR_E_INVALIDACTION); + IStream_Release(stream); + + /* WriteEndDocument */ + stream = writer_set_output(writer); + + hr = IXmlWriter_WriteEndDocument(writer); + ok(hr == WR_E_INVALIDACTION, "got 0x%08x\n", hr); + + check_writer_state(writer, WR_E_INVALIDACTION); + IStream_Release(stream); + + /* WriteFullEndElement */ + stream = writer_set_output(writer); + + hr = IXmlWriter_WriteFullEndElement(writer); + ok(hr == WR_E_INVALIDACTION, "got 0x%08x\n", hr); + + check_writer_state(writer, WR_E_INVALIDACTION); + IStream_Release(stream); + + /* WriteCData */ + stream = writer_set_output(writer); + + hr = IXmlWriter_WriteCData(writer, aW); + ok(hr == WR_E_INVALIDACTION, "got 0x%08x\n", hr); + + check_writer_state(writer, WR_E_INVALIDACTION); + IStream_Release(stream); + + /* WriteName */ + stream = writer_set_output(writer); + + hr = IXmlWriter_WriteName(writer, aW); + ok(hr == WR_E_INVALIDACTION, "got 0x%08x\n", hr); + + check_writer_state(writer, WR_E_INVALIDACTION); + IStream_Release(stream); + + /* WriteNmToken */ + stream = writer_set_output(writer); + + hr = IXmlWriter_WriteNmToken(writer, aW); + ok(hr == WR_E_INVALIDACTION, "got 0x%08x\n", hr); + + check_writer_state(writer, WR_E_INVALIDACTION); + IStream_Release(stream);
+ /* WriteString */ + stream = writer_set_output(writer); + + hr = IXmlWriter_WriteString(writer, aW); + ok(hr == WR_E_INVALIDACTION, "got 0x%08x\n", hr); + + check_writer_state(writer, WR_E_INVALIDACTION); IStream_Release(stream);
IXmlWriter_Release(writer); diff --git a/dlls/xmllite/writer.c b/dlls/xmllite/writer.c index 5e3557b..61190c6 100644 --- a/dlls/xmllite/writer.c +++ b/dlls/xmllite/writer.c @@ -626,7 +626,9 @@ static HRESULT WINAPI xmlwriter_WriteCData(IXmlWriter *iface, LPCWSTR data) case XmlWriterState_ElemStarted: writer_close_starttag(This); break; + case XmlWriterState_Ready: case XmlWriterState_DocClosed: + This->state = XmlWriterState_DocClosed; return WR_E_INVALIDACTION; default: ; @@ -912,7 +914,9 @@ static HRESULT WINAPI xmlwriter_WriteName(IXmlWriter *iface, LPCWSTR pwszName) { case XmlWriterState_Initial: return E_UNEXPECTED; + case XmlWriterState_Ready: case XmlWriterState_DocClosed: + This->state = XmlWriterState_DocClosed; return WR_E_INVALIDACTION; default: ; @@ -931,7 +935,9 @@ static HRESULT WINAPI xmlwriter_WriteNmToken(IXmlWriter *iface, LPCWSTR pwszNmTo { case XmlWriterState_Initial: return E_UNEXPECTED; + case XmlWriterState_Ready: case XmlWriterState_DocClosed: + This->state = XmlWriterState_DocClosed; return WR_E_INVALIDACTION; default: ; @@ -1136,7 +1142,9 @@ static HRESULT WINAPI xmlwriter_WriteString(IXmlWriter *iface, LPCWSTR pwszText) { case XmlWriterState_Initial: return E_UNEXPECTED; + case XmlWriterState_Ready: case XmlWriterState_DocClosed: + This->state = XmlWriterState_DocClosed; return WR_E_INVALIDACTION; default: ;