@@ -2050,6 +2050,150 @@ public void notCloseUserStreamTest() throws IOException {
20502050 }
20512051 }
20522052
2053+ @ Test
2054+ @ LogMessages (messages = {
2055+ @ LogMessage (messageTemplate = KernelExceptionMessageConstant .UNEXPECTED_TOKEN )
2056+ })
2057+ public void endDicInsteadOfArrayClosingBracketTest () throws IOException {
2058+ String fileName = sourceFolder + "invalidArrayEndDictToken.pdf" ;
2059+ PdfDocument document = new PdfDocument (new PdfReader (fileName ));
2060+ PdfArray actual = (PdfArray ) document .getPdfObject (4 );
2061+ PdfArray expected = new PdfArray (new float []{5 , 10 , 15 , 20 });
2062+ for (int i = 0 ; i < expected .size (); i ++) {
2063+ Assert .assertEquals (expected .get (i ), actual .get (i ));
2064+ }
2065+ }
2066+
2067+ @ Test
2068+ public void endArrayClosingBracketInsteadOfEndDicTest () {
2069+ String fileName = sourceFolder + "endArrayClosingBracketInsteadOfEndDic.pdf" ;
2070+ Exception exception = Assert .assertThrows (com .itextpdf .io .IOException .class ,
2071+ () -> new PdfDocument (new PdfReader (fileName )));
2072+ Assert .assertEquals (MessageFormatUtil .format (KernelExceptionMessageConstant .UNEXPECTED_TOKEN , "]" ),
2073+ exception .getCause ().getMessage ());
2074+ }
2075+
2076+ @ Test
2077+ public void endDicClosingBracketInsideTheDicTest () {
2078+ String fileName = sourceFolder + "endDicClosingBracketInsideTheDic.pdf" ;
2079+ Exception exception = Assert .assertThrows (com .itextpdf .io .IOException .class ,
2080+ () -> new PdfDocument (new PdfReader (fileName )));
2081+ Assert .assertEquals (MessageFormatUtil .format (KernelExceptionMessageConstant .UNEXPECTED_TOKEN , ">>" ),
2082+ exception .getCause ().getMessage ());
2083+ }
2084+
2085+ @ Test
2086+ @ LogMessages (messages = {
2087+ @ LogMessage (messageTemplate = KernelExceptionMessageConstant .UNEXPECTED_TOKEN )
2088+ })
2089+ public void eofInsteadOfArrayClosingBracketTest () throws IOException {
2090+ String fileName = sourceFolder + "invalidArrayEOFToken.pdf" ;
2091+ PdfDocument document = new PdfDocument (new PdfReader (fileName ));
2092+ PdfArray actual = (PdfArray ) document .getPdfObject (4 );
2093+ PdfArray expected = new PdfArray (new float []{5 , 10 , 15 , 20 });
2094+ for (int i = 0 ; i < expected .size (); i ++) {
2095+ Assert .assertEquals (expected .get (i ), actual .get (i ));
2096+ }
2097+ }
2098+
2099+ @ Test
2100+ @ LogMessages (messages = {
2101+ @ LogMessage (messageTemplate = KernelExceptionMessageConstant .UNEXPECTED_TOKEN )
2102+ })
2103+ public void endObjInsteadOfArrayClosingBracketTest () throws IOException {
2104+ String fileName = sourceFolder + "invalidArrayEndObjToken.pdf" ;
2105+ PdfDocument document = new PdfDocument (new PdfReader (fileName ));
2106+ PdfArray actual = (PdfArray ) document .getPdfObject (4 );
2107+ PdfArray expected = new PdfArray (new float []{5 , 10 , 15 , 20 });
2108+ for (int i = 0 ; i < expected .size (); i ++) {
2109+ Assert .assertEquals (expected .get (i ), actual .get (i ));
2110+ }
2111+ }
2112+
2113+ @ Test
2114+ @ LogMessages (messages = {
2115+ @ LogMessage (messageTemplate = KernelExceptionMessageConstant .UNEXPECTED_TOKEN ),
2116+ @ LogMessage (messageTemplate = LogMessageConstant .XREF_ERROR_WHILE_READING_TABLE_WILL_BE_REBUILT )
2117+ })
2118+ public void nameInsteadOfArrayClosingBracketTest () throws IOException {
2119+ String fileName = sourceFolder + "invalidArrayNameToken.pdf" ;
2120+ PdfDocument document = new PdfDocument (new PdfReader (fileName ));
2121+ PdfArray actual = (PdfArray ) document .getPdfObject (4 );
2122+ PdfArray expected = new PdfArray (new float []{5 , 10 , 15 , 20 });
2123+ for (int i = 0 ; i < expected .size (); i ++) {
2124+ Assert .assertEquals (expected .get (i ), actual .get (i ));
2125+ }
2126+ }
2127+
2128+ @ Test
2129+ @ LogMessages (messages = {
2130+ @ LogMessage (messageTemplate = KernelExceptionMessageConstant .UNEXPECTED_TOKEN )
2131+ })
2132+ public void objInsteadOfArrayClosingBracketTest () throws IOException {
2133+ String fileName = sourceFolder + "invalidArrayObjToken.pdf" ;
2134+ PdfDocument document = new PdfDocument (new PdfReader (fileName ));
2135+ PdfArray actual = (PdfArray ) document .getPdfObject (4 );
2136+ PdfArray expected = new PdfArray (new float []{5 , 10 , 15 , 20 });
2137+ for (int i = 0 ; i < expected .size (); i ++) {
2138+ Assert .assertEquals (expected .get (i ), actual .get (i ));
2139+ }
2140+ }
2141+
2142+ @ Test
2143+ @ LogMessages (messages = {
2144+ @ LogMessage (messageTemplate = KernelExceptionMessageConstant .UNEXPECTED_TOKEN )
2145+ })
2146+ public void refInsteadOfArrayClosingBracketTest () throws IOException {
2147+ String fileName = sourceFolder + "invalidArrayRefToken.pdf" ;
2148+ PdfDocument document = new PdfDocument (new PdfReader (fileName ));
2149+ PdfArray actual = (PdfArray ) document .getPdfObject (4 );
2150+ PdfArray expected = new PdfArray (new float []{5 , 10 , 15 , 20 });
2151+ for (int i = 0 ; i < expected .size (); i ++) {
2152+ Assert .assertEquals (expected .get (i ), actual .get (i ));
2153+ }
2154+ }
2155+
2156+ @ Test
2157+ @ LogMessages (messages = {
2158+ @ LogMessage (messageTemplate = KernelExceptionMessageConstant .UNEXPECTED_TOKEN , count = 2 )
2159+ })
2160+ public void startArrayInsteadOfArrayClosingBracketTest () throws IOException {
2161+ String fileName = sourceFolder + "invalidArrayStartArrayToken.pdf" ;
2162+ PdfDocument document = new PdfDocument (new PdfReader (fileName ));
2163+ PdfArray actual = (PdfArray ) document .getPdfObject (4 );
2164+ PdfArray expected = new PdfArray (new float []{5 , 10 , 15 , 20 });
2165+ for (int i = 0 ; i < expected .size (); i ++) {
2166+ Assert .assertEquals (expected .get (i ), actual .get (i ));
2167+ }
2168+ }
2169+
2170+ @ Test
2171+ @ LogMessages (messages = {
2172+ @ LogMessage (messageTemplate = KernelExceptionMessageConstant .UNEXPECTED_TOKEN ),
2173+ @ LogMessage (messageTemplate = LogMessageConstant .XREF_ERROR_WHILE_READING_TABLE_WILL_BE_REBUILT )
2174+ })
2175+ public void stringInsteadOfArrayClosingBracketTest () throws IOException {
2176+ String fileName = sourceFolder + "invalidArrayStringToken.pdf" ;
2177+ PdfDocument document = new PdfDocument (new PdfReader (fileName ));
2178+ PdfArray actual = (PdfArray ) document .getPdfObject (4 );
2179+ PdfArray expected = new PdfArray (new float []{5 , 10 , 15 , 20 });
2180+ for (int i = 0 ; i < expected .size (); i ++) {
2181+ Assert .assertEquals (expected .get (i ), actual .get (i ));
2182+ }
2183+ }
2184+
2185+ @ Test
2186+ public void closingArrayBracketMissingConservativeTest () throws IOException {
2187+ String fileName = sourceFolder + "invalidArrayObjToken.pdf" ;
2188+ PdfReader reader = new PdfReader (fileName );
2189+ reader .setStrictnessLevel (StrictnessLevel .CONSERVATIVE );
2190+ PdfDocument document = new PdfDocument (reader );
2191+ Exception exception = Assert .assertThrows (com .itextpdf .io .IOException .class ,
2192+ () -> document .getPdfObject (4 ));
2193+ Assert .assertEquals (MessageFormatUtil .format (KernelExceptionMessageConstant .UNEXPECTED_TOKEN , "obj" ),
2194+ exception .getCause ().getMessage ());
2195+ }
2196+
20532197 private static File copyFileForTest (String fileName , String copiedFileName ) throws IOException {
20542198 File copiedFile = new File (copiedFileName );
20552199 Files .copy (Paths .get (fileName ), Paths .get (copiedFileName ));
0 commit comments