Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Side by Side Diff: xfa/fde/xml/fde_xml_imp_unittest.cpp

Issue 2223823003: Guard against undefined shift. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« xfa/fde/xml/fde_xml_imp.cpp ('K') | « xfa/fde/xml/fde_xml_imp.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "xfa/fde/xml/fde_xml_imp.h" 5 #include "xfa/fde/xml/fde_xml_imp.h"
6 6
7 #include "xfa/fgas/crt/fgas_stream.h" 7 #include "xfa/fgas/crt/fgas_stream.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 TEST(CFDE_XMLSyntaxParser, CData) { 10 TEST(CFDE_XMLSyntaxParser, CData) {
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 parser.GetAttributeValue(data); 513 parser.GetAttributeValue(data);
514 EXPECT_EQ(L"application/x-javascript", data); 514 EXPECT_EQ(L"application/x-javascript", data);
515 515
516 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse()); 516 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
517 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse()); 517 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
518 parser.GetTextData(data); 518 parser.GetTextData(data);
519 EXPECT_EQ(L"\n ", data); 519 EXPECT_EQ(L"\n ", data);
520 520
521 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse()); 521 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
522 } 522 }
523
524 TEST(CFDE_XMLSyntaxParser, Entities) {
525 const FX_WCHAR* input =
526 L"<script contentType=\"application/x-javascript\">"
527 L"&#66;"
528 L"&#x54;"
529 L"</script>";
530
531 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
532 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
533 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
534 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
535 CFDE_XMLSyntaxParser parser;
536 parser.Init(stream.get(), 256);
537
538 CFX_WideString data;
539
540 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
541 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
542 parser.GetTagName(data);
543 EXPECT_EQ(L"script", data);
544
545 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
546 parser.GetAttributeName(data);
547 EXPECT_EQ(L"contentType", data);
548 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
549 parser.GetAttributeValue(data);
550 EXPECT_EQ(L"application/x-javascript", data);
551
552 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
553 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
554 parser.GetTextData(data);
555 EXPECT_EQ(L"BT", data);
556
557 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
558 parser.GetTagName(data);
559 EXPECT_EQ(L"script", data);
560
561 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
562 }
563
564 TEST(CFDE_XMLSyntaxParser, EntityOverflowHex) {
565 const FX_WCHAR* input =
566 L"<script contentType=\"application/x-javascript\">"
567 L"&#xaDBDFFFFF;"
568 L"</script>";
569
570 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
571 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
572 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
573 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
574 CFDE_XMLSyntaxParser parser;
575 parser.Init(stream.get(), 256);
576
577 CFX_WideString data;
578
579 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
580 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
581 parser.GetTagName(data);
582 EXPECT_EQ(L"script", data);
583
584 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
585 parser.GetAttributeName(data);
586 EXPECT_EQ(L"contentType", data);
587 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
588 parser.GetAttributeValue(data);
589 EXPECT_EQ(L"application/x-javascript", data);
590
591 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
592 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
593 parser.GetTextData(data);
594
595 // The Windows wchar_t is unsigned so this doesn't end up overflowing to
596 // zero and has a different output value.
597 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
598 EXPECT_EQ(L"\xffff", data);
599 #else
600 EXPECT_EQ(L" ", data);
601 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
602
603 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
604 parser.GetTagName(data);
605 EXPECT_EQ(L"script", data);
606
607 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
608 }
609
610 TEST(CFDE_XMLSyntaxParser, EntityOverflowDecimal) {
611 const FX_WCHAR* input =
612 L"<script contentType=\"application/x-javascript\">"
613 L"&#2914910205;"
614 L"</script>";
615
616 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
617 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
618 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
619 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
620 CFDE_XMLSyntaxParser parser;
621 parser.Init(stream.get(), 256);
622
623 CFX_WideString data;
624
625 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
626 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
627 parser.GetTagName(data);
628 EXPECT_EQ(L"script", data);
629
630 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
631 parser.GetAttributeName(data);
632 EXPECT_EQ(L"contentType", data);
633 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
634 parser.GetAttributeValue(data);
635 EXPECT_EQ(L"application/x-javascript", data);
636
637 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
638 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
639 parser.GetTextData(data);
640
641 // The Windows wchar_t is unsigned so this doesn't end up overflowing to
642 // zero and has a different output value.
643 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
644 EXPECT_EQ(L"\xfffd", data);
645 #else
646 EXPECT_EQ(L" ", data);
647 #endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
648
649 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
650 parser.GetTagName(data);
651 EXPECT_EQ(L"script", data);
652
653 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
654 }
OLDNEW
« xfa/fde/xml/fde_xml_imp.cpp ('K') | « xfa/fde/xml/fde_xml_imp.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698