| Index: xfa/fde/xml/fde_xml_imp_unittest.cpp
|
| diff --git a/xfa/fde/xml/fde_xml_imp_unittest.cpp b/xfa/fde/xml/fde_xml_imp_unittest.cpp
|
| index 0db63e4965a651284ee764a17cc44c51a5125862..03cc426d32c1bcdf633271d0ced9f39511022052 100644
|
| --- a/xfa/fde/xml/fde_xml_imp_unittest.cpp
|
| +++ b/xfa/fde/xml/fde_xml_imp_unittest.cpp
|
| @@ -520,3 +520,126 @@ TEST(CFDE_XMLSyntaxParser, CommentTwoDash) {
|
|
|
| EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
|
| }
|
| +
|
| +TEST(CFDE_XMLSyntaxParser, Entities) {
|
| + const FX_WCHAR* input =
|
| + L"<script contentType=\"application/x-javascript\">"
|
| + L"B"
|
| + L"T"
|
| + L"H"
|
| + L"ꭈ"
|
| + L"�"
|
| + L"</script>";
|
| +
|
| + // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
|
| + size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
|
| + std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
|
| + reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
|
| + CFDE_XMLSyntaxParser parser;
|
| + parser.Init(stream.get(), 256);
|
| +
|
| + CFX_WideString data;
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
|
| + parser.GetTagName(data);
|
| + EXPECT_EQ(L"script", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
|
| + parser.GetAttributeName(data);
|
| + EXPECT_EQ(L"contentType", data);
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
|
| + parser.GetAttributeValue(data);
|
| + EXPECT_EQ(L"application/x-javascript", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
|
| + parser.GetTextData(data);
|
| + EXPECT_EQ(L"BTH\xab48", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
|
| + parser.GetTagName(data);
|
| + EXPECT_EQ(L"script", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
|
| +}
|
| +
|
| +TEST(CFDE_XMLSyntaxParser, EntityOverflowHex) {
|
| + const FX_WCHAR* input =
|
| + L"<script contentType=\"application/x-javascript\">"
|
| + L"�"
|
| + L"�"
|
| + L"</script>";
|
| +
|
| + // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
|
| + size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
|
| + std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
|
| + reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
|
| + CFDE_XMLSyntaxParser parser;
|
| + parser.Init(stream.get(), 256);
|
| +
|
| + CFX_WideString data;
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
|
| + parser.GetTagName(data);
|
| + EXPECT_EQ(L"script", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
|
| + parser.GetAttributeName(data);
|
| + EXPECT_EQ(L"contentType", data);
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
|
| + parser.GetAttributeValue(data);
|
| + EXPECT_EQ(L"application/x-javascript", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
|
| + parser.GetTextData(data);
|
| + EXPECT_EQ(L" ", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
|
| + parser.GetTagName(data);
|
| + EXPECT_EQ(L"script", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
|
| +}
|
| +
|
| +TEST(CFDE_XMLSyntaxParser, EntityOverflowDecimal) {
|
| + const FX_WCHAR* input =
|
| + L"<script contentType=\"application/x-javascript\">"
|
| + L"�"
|
| + L"�"
|
| + L"</script>";
|
| +
|
| + // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
|
| + size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
|
| + std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
|
| + reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
|
| + CFDE_XMLSyntaxParser parser;
|
| + parser.Init(stream.get(), 256);
|
| +
|
| + CFX_WideString data;
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
|
| + parser.GetTagName(data);
|
| + EXPECT_EQ(L"script", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
|
| + parser.GetAttributeName(data);
|
| + EXPECT_EQ(L"contentType", data);
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
|
| + parser.GetAttributeValue(data);
|
| + EXPECT_EQ(L"application/x-javascript", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
|
| + parser.GetTextData(data);
|
| + EXPECT_EQ(L" ", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
|
| + parser.GetTagName(data);
|
| + EXPECT_EQ(L"script", data);
|
| +
|
| + EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
|
| +}
|
|
|