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

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: Do calculation in uint32 space 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"&#x00000000000000000048;"
530 L"&#x0000000000000000AB48;"
531 L"&#x0000000000000000000;"
532 L"</script>";
533
534 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
535 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
536 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
537 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
538 CFDE_XMLSyntaxParser parser;
539 parser.Init(stream.get(), 256);
540
541 CFX_WideString data;
542
543 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
544 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
545 parser.GetTagName(data);
546 EXPECT_EQ(L"script", data);
547
548 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
549 parser.GetAttributeName(data);
550 EXPECT_EQ(L"contentType", data);
551 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
552 parser.GetAttributeValue(data);
553 EXPECT_EQ(L"application/x-javascript", data);
554
555 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
556 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
557 parser.GetTextData(data);
558 EXPECT_EQ(L"BTH\xab48", data);
559
560 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
561 parser.GetTagName(data);
562 EXPECT_EQ(L"script", data);
563
564 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
565 }
566
567 TEST(CFDE_XMLSyntaxParser, EntityOverflowHex) {
568 const FX_WCHAR* input =
569 L"<script contentType=\"application/x-javascript\">"
570 L"&#xaDBDFFFFF;"
571 L"</script>";
572
573 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
574 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
575 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
576 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
577 CFDE_XMLSyntaxParser parser;
578 parser.Init(stream.get(), 256);
579
580 CFX_WideString data;
581
582 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
583 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
584 parser.GetTagName(data);
585 EXPECT_EQ(L"script", data);
586
587 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
588 parser.GetAttributeName(data);
589 EXPECT_EQ(L"contentType", data);
590 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
591 parser.GetAttributeValue(data);
592 EXPECT_EQ(L"application/x-javascript", data);
593
594 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
595 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
596 parser.GetTextData(data);
597 EXPECT_EQ(L" ", data);
598
599 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
600 parser.GetTagName(data);
601 EXPECT_EQ(L"script", data);
602
603 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
604 }
605
606 TEST(CFDE_XMLSyntaxParser, EntityOverflowDecimal) {
607 const FX_WCHAR* input =
608 L"<script contentType=\"application/x-javascript\">"
609 L"&#2914910205;"
610 L"</script>";
611
612 // We * sizeof(FX_WCHAR) because we pass in the uint8_t, not the FX_WCHAR.
613 size_t len = FXSYS_wcslen(input) * sizeof(FX_WCHAR);
614 std::unique_ptr<IFX_Stream> stream(IFX_Stream::CreateStream(
615 reinterpret_cast<uint8_t*>(const_cast<FX_WCHAR*>(input)), len, 0));
616 CFDE_XMLSyntaxParser parser;
617 parser.Init(stream.get(), 256);
618
619 CFX_WideString data;
620
621 EXPECT_EQ(FDE_XmlSyntaxResult::ElementOpen, parser.DoSyntaxParse());
622 EXPECT_EQ(FDE_XmlSyntaxResult::TagName, parser.DoSyntaxParse());
623 parser.GetTagName(data);
624 EXPECT_EQ(L"script", data);
625
626 EXPECT_EQ(FDE_XmlSyntaxResult::AttriName, parser.DoSyntaxParse());
627 parser.GetAttributeName(data);
628 EXPECT_EQ(L"contentType", data);
629 EXPECT_EQ(FDE_XmlSyntaxResult::AttriValue, parser.DoSyntaxParse());
630 parser.GetAttributeValue(data);
631 EXPECT_EQ(L"application/x-javascript", data);
632
633 EXPECT_EQ(FDE_XmlSyntaxResult::ElementBreak, parser.DoSyntaxParse());
634 EXPECT_EQ(FDE_XmlSyntaxResult::Text, parser.DoSyntaxParse());
635 parser.GetTextData(data);
636 EXPECT_EQ(L" ", data);
637
638 EXPECT_EQ(FDE_XmlSyntaxResult::ElementClose, parser.DoSyntaxParse());
639 parser.GetTagName(data);
640 EXPECT_EQ(L"script", data);
641
642 EXPECT_EQ(FDE_XmlSyntaxResult::EndOfString, parser.DoSyntaxParse());
643 }
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