@@ -59,9 +59,14 @@ This file is part of the iText (R) project.
59
59
import com .itextpdf .test .annotations .LogMessages ;
60
60
import com .itextpdf .test .annotations .type .IntegrationTest ;
61
61
62
- import java .io . FileOutputStream ;
62
+ import java .lang . reflect . Array ;
63
63
import java .util .ArrayList ;
64
- import java .util .Queue ;
64
+ import java .util .Arrays ;
65
+ import java .util .Collections ;
66
+ import java .util .HashSet ;
67
+ import java .util .LinkedHashSet ;
68
+ import java .util .Set ;
69
+ import javax .xml .bind .Element ;
65
70
import org .junit .Assert ;
66
71
import org .junit .BeforeClass ;
67
72
import org .junit .Rule ;
@@ -649,6 +654,74 @@ public void readSinglePageTest() throws IOException {
649
654
document .close ();
650
655
}
651
656
657
+ @ Test
658
+ public void implicitPagesTreeRebuildingTest () throws IOException , InterruptedException {
659
+ String inFileName = sourceFolder + "implicitPagesTreeRebuilding.pdf" ;
660
+ String outFileName = destinationFolder + "implicitPagesTreeRebuilding.pdf" ;
661
+ String cmpFileName = sourceFolder + "cmp_implicitPagesTreeRebuilding.pdf" ;
662
+ PdfDocument pdfDocument = new PdfDocument (new PdfReader (inFileName ), new PdfWriter (outFileName ));
663
+ pdfDocument .close ();
664
+ Assert .assertNull (new CompareTool ().compareByContent (outFileName ,cmpFileName , destinationFolder ));
665
+ }
666
+
667
+ @ Test
668
+ @ LogMessages (messages = {@ LogMessage (messageTemplate = LogMessageConstant .PAGE_TREE_IS_BROKEN_FAILED_TO_RETRIEVE_PAGE )})
669
+ public void brokenPageTreeWithExcessiveLastPageTest () throws IOException {
670
+ String inFileName = sourceFolder + "brokenPageTreeNullLast.pdf" ;
671
+
672
+ PdfDocument pdfDocument = new PdfDocument (new PdfReader (inFileName ));
673
+
674
+ List <Integer > pages = Arrays .asList (4 );
675
+ Set <Integer > nullPages = new HashSet <>(pages );
676
+
677
+ findAndAssertNullPages (pdfDocument , nullPages );
678
+ }
679
+
680
+ @ Test
681
+ @ LogMessages (messages = {@ LogMessage (messageTemplate = LogMessageConstant .PAGE_TREE_IS_BROKEN_FAILED_TO_RETRIEVE_PAGE )})
682
+ public void brokenPageTreeWithExcessiveMiddlePageTest () throws IOException {
683
+ String inFileName = sourceFolder + "brokenPageTreeNullMiddle.pdf" ;
684
+
685
+ PdfDocument pdfDocument = new PdfDocument (new PdfReader (inFileName ));
686
+
687
+ List <Integer > pages = Arrays .asList (3 );
688
+ Set <Integer > nullPages = new HashSet <>(pages );
689
+
690
+ findAndAssertNullPages (pdfDocument , nullPages );
691
+ }
692
+
693
+ @ Test
694
+ @ LogMessages (messages = {@ LogMessage (messageTemplate = LogMessageConstant .PAGE_TREE_IS_BROKEN_FAILED_TO_RETRIEVE_PAGE , count = 7 )})
695
+ public void brokenPageTreeWithExcessiveMultipleNegativePagesTest () throws IOException {
696
+ String inFileName = sourceFolder + "brokenPageTreeNullMultipleSequence.pdf" ;
697
+
698
+ PdfDocument pdfDocument = new PdfDocument (new PdfReader (inFileName ));
699
+
700
+ List <Integer > pages = Arrays .asList (2 , 3 , 4 , 6 , 7 , 8 , 9 );
701
+ Set <Integer > nullPages = new HashSet <>(pages );
702
+
703
+ findAndAssertNullPages (pdfDocument , nullPages );
704
+ }
705
+
706
+ @ Test
707
+ @ LogMessages (messages = {@ LogMessage (messageTemplate = LogMessageConstant .PAGE_TREE_IS_BROKEN_FAILED_TO_RETRIEVE_PAGE , count = 2 )})
708
+ public void brokenPageTreeWithExcessiveRangeNegativePagesTest () throws IOException {
709
+ String inFileName = sourceFolder + "brokenPageTreeNullRangeNegative.pdf" ;
710
+
711
+ PdfDocument pdfDocument = new PdfDocument (new PdfReader (inFileName ));
712
+
713
+ List <Integer > pages = Arrays .asList (2 , 4 );
714
+ Set <Integer > nullPages = new HashSet <>(pages );
715
+
716
+ findAndAssertNullPages (pdfDocument , nullPages );
717
+ }
718
+
719
+ private static void findAndAssertNullPages (PdfDocument pdfDocument , Set <Integer > nullPages ) {
720
+ for (Integer e : nullPages ) {
721
+ Assert .assertNull (pdfDocument .getPage ((int ) e ));
722
+ }
723
+ }
724
+
652
725
private int getAmountOfReadPages (PdfArray pageIndRefArray ) {
653
726
int amountOfLoadedPages = 0 ;
654
727
for (int i = 0 ; i < pageIndRefArray .size (); i ++) {
0 commit comments