3625820490
The code in wxHtmlParser supposed in many places that a '<' character must be always followed by a '>' one and could create (and sometimes dereference) invalid iterators if this wasn't the case resulting in asserts from MSVC debug CRT and possibly crashes. Fix this by ensuring that only valid iterators are used and add a trivial unit test for wxHtmlParser which checks that it can parse invalid HTML without crashing. Closes #12869. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66678 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
76 lines
2.0 KiB
C++
76 lines
2.0 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/html/htmlparser.cpp
|
|
// Purpose: wxHtmlParser tests
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2011-01-13
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "testprec.h"
|
|
|
|
#if wxUSE_HTML
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#endif // WX_PRECOMP
|
|
|
|
#include "wx/html/htmlpars.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// test class
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class HtmlParserTestCase : public CppUnit::TestCase
|
|
{
|
|
public:
|
|
HtmlParserTestCase() { }
|
|
|
|
private:
|
|
CPPUNIT_TEST_SUITE( HtmlParserTestCase );
|
|
CPPUNIT_TEST( Invalid );
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
void Invalid();
|
|
|
|
wxDECLARE_NO_COPY_CLASS(HtmlParserTestCase);
|
|
};
|
|
|
|
// register in the unnamed registry so that these tests are run by default
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( HtmlParserTestCase );
|
|
|
|
// also include in it's own registry so that these tests can be run alone
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( HtmlParserTestCase, "HtmlParserTestCase" );
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// tests themselves
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// Test that parsing invalid HTML simply fails but doesn't crash for example.
|
|
void HtmlParserTestCase::Invalid()
|
|
{
|
|
class NullParser : public wxHtmlParser
|
|
{
|
|
public:
|
|
virtual wxObject *GetProduct() { return NULL; }
|
|
|
|
protected:
|
|
virtual void AddText(const wxString& WXUNUSED(txt)) { }
|
|
};
|
|
|
|
NullParser p;
|
|
p.Parse("<");
|
|
p.Parse("<foo");
|
|
p.Parse("<!--");
|
|
p.Parse("<!---");
|
|
}
|
|
|
|
#endif //wxUSE_HTML
|