Skip to content

Commit aa1ef56

Browse files
ars18wrwiText-CI
authored andcommitted
Move tokenizer's position to the end of the stream after reading object. Minor refactoring
DEVSIX-6548 Autoported commit. Original commit hash: [1953b3f05]
1 parent 7bbffc1 commit aa1ef56

File tree

4 files changed

+60
-40
lines changed

4 files changed

+60
-40
lines changed

itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfReaderTest.cs

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,12 +1513,12 @@ public virtual void HasRebuiltXrefPdfDocumentNotReadTest() {
15131513
[NUnit.Framework.Test]
15141514
public virtual void HasRebuiltXrefReadingNotCompletedTest() {
15151515
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1516-
PdfReader hasRebuiltXrefReader = new _PdfReader_1758(filename);
1516+
PdfReader hasRebuiltXrefReader = new _PdfReader_1759(filename);
15171517
ReadingNotCompletedTest(hasRebuiltXrefReader);
15181518
}
15191519

1520-
private sealed class _PdfReader_1758 : PdfReader {
1521-
public _PdfReader_1758(String baseArg1)
1520+
private sealed class _PdfReader_1759 : PdfReader {
1521+
public _PdfReader_1759(String baseArg1)
15221522
: base(baseArg1) {
15231523
}
15241524

@@ -1539,12 +1539,12 @@ public virtual void HasHybridXrefPdfDocumentNotReadTest() {
15391539
[NUnit.Framework.Test]
15401540
public virtual void HasHybridXrefReadingNotCompletedTest() {
15411541
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1542-
PdfReader hasHybridXrefPdfReader = new _PdfReader_1781(filename);
1542+
PdfReader hasHybridXrefPdfReader = new _PdfReader_1782(filename);
15431543
ReadingNotCompletedTest(hasHybridXrefPdfReader);
15441544
}
15451545

1546-
private sealed class _PdfReader_1781 : PdfReader {
1547-
public _PdfReader_1781(String baseArg1)
1546+
private sealed class _PdfReader_1782 : PdfReader {
1547+
public _PdfReader_1782(String baseArg1)
15481548
: base(baseArg1) {
15491549
}
15501550

@@ -1564,12 +1564,12 @@ public virtual void HasXrefStmPdfDocumentNotReadTest() {
15641564
[NUnit.Framework.Test]
15651565
public virtual void HasXrefStmReadingNotCompletedTest() {
15661566
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1567-
PdfReader hasXrefStmReader = new _PdfReader_1804(filename);
1567+
PdfReader hasXrefStmReader = new _PdfReader_1805(filename);
15681568
ReadingNotCompletedTest(hasXrefStmReader);
15691569
}
15701570

1571-
private sealed class _PdfReader_1804 : PdfReader {
1572-
public _PdfReader_1804(String baseArg1)
1571+
private sealed class _PdfReader_1805 : PdfReader {
1572+
public _PdfReader_1805(String baseArg1)
15731573
: base(baseArg1) {
15741574
}
15751575

@@ -1589,12 +1589,12 @@ public virtual void HasFixedXrefPdfDocumentNotReadTest() {
15891589
[NUnit.Framework.Test]
15901590
public virtual void HasFixedXrefReadingNotCompletedTest() {
15911591
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1592-
PdfReader hasFixedXrefReader = new _PdfReader_1827(filename);
1592+
PdfReader hasFixedXrefReader = new _PdfReader_1828(filename);
15931593
ReadingNotCompletedTest(hasFixedXrefReader);
15941594
}
15951595

1596-
private sealed class _PdfReader_1827 : PdfReader {
1597-
public _PdfReader_1827(String baseArg1)
1596+
private sealed class _PdfReader_1828 : PdfReader {
1597+
public _PdfReader_1828(String baseArg1)
15981598
: base(baseArg1) {
15991599
}
16001600

@@ -1614,12 +1614,12 @@ public virtual void GetLastXrefPdfDocumentNotReadTest() {
16141614
[NUnit.Framework.Test]
16151615
public virtual void GetLastXrefReadingNotCompletedTest() {
16161616
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1617-
PdfReader getLastXrefReader = new _PdfReader_1850(filename);
1617+
PdfReader getLastXrefReader = new _PdfReader_1851(filename);
16181618
ReadingNotCompletedTest(getLastXrefReader);
16191619
}
16201620

1621-
private sealed class _PdfReader_1850 : PdfReader {
1622-
public _PdfReader_1850(String baseArg1)
1621+
private sealed class _PdfReader_1851 : PdfReader {
1622+
public _PdfReader_1851(String baseArg1)
16231623
: base(baseArg1) {
16241624
}
16251625

@@ -1640,12 +1640,12 @@ public virtual void GetPermissionsPdfDocumentNotReadTest() {
16401640
[NUnit.Framework.Test]
16411641
public virtual void GetPermissionsReadingNotCompletedTest() {
16421642
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1643-
PdfReader getPermissionsReader = new _PdfReader_1873(filename);
1643+
PdfReader getPermissionsReader = new _PdfReader_1874(filename);
16441644
ReadingNotCompletedTest(getPermissionsReader);
16451645
}
16461646

1647-
private sealed class _PdfReader_1873 : PdfReader {
1648-
public _PdfReader_1873(String baseArg1)
1647+
private sealed class _PdfReader_1874 : PdfReader {
1648+
public _PdfReader_1874(String baseArg1)
16491649
: base(baseArg1) {
16501650
}
16511651

@@ -1666,12 +1666,12 @@ public virtual void IsOpenedWithFullPPdfDocumentNotReadTest() {
16661666
[NUnit.Framework.Test]
16671667
public virtual void IsOpenedWithFullPReadingNotCompletedTest() {
16681668
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1669-
PdfReader isOpenedWithFullPReader = new _PdfReader_1898(filename);
1669+
PdfReader isOpenedWithFullPReader = new _PdfReader_1899(filename);
16701670
ReadingNotCompletedTest(isOpenedWithFullPReader);
16711671
}
16721672

1673-
private sealed class _PdfReader_1898 : PdfReader {
1674-
public _PdfReader_1898(String baseArg1)
1673+
private sealed class _PdfReader_1899 : PdfReader {
1674+
public _PdfReader_1899(String baseArg1)
16751675
: base(baseArg1) {
16761676
}
16771677

@@ -1692,12 +1692,12 @@ public virtual void GetCryptoModePdfDocumentNotReadTest() {
16921692
[NUnit.Framework.Test]
16931693
public virtual void GetCryptoModeReadingNotCompletedTest() {
16941694
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1695-
PdfReader getCryptoModeReader = new _PdfReader_1921(filename);
1695+
PdfReader getCryptoModeReader = new _PdfReader_1922(filename);
16961696
ReadingNotCompletedTest(getCryptoModeReader);
16971697
}
16981698

1699-
private sealed class _PdfReader_1921 : PdfReader {
1700-
public _PdfReader_1921(String baseArg1)
1699+
private sealed class _PdfReader_1922 : PdfReader {
1700+
public _PdfReader_1922(String baseArg1)
17011701
: base(baseArg1) {
17021702
}
17031703

@@ -1718,12 +1718,12 @@ public virtual void ComputeUserPasswordPdfDocumentNotReadTest() {
17181718
[NUnit.Framework.Test]
17191719
public virtual void ComputeUserPasswordReadingNotCompletedTest() {
17201720
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1721-
PdfReader computeUserPasswordReader = new _PdfReader_1946(filename);
1721+
PdfReader computeUserPasswordReader = new _PdfReader_1947(filename);
17221722
ReadingNotCompletedTest(computeUserPasswordReader);
17231723
}
17241724

1725-
private sealed class _PdfReader_1946 : PdfReader {
1726-
public _PdfReader_1946(String baseArg1)
1725+
private sealed class _PdfReader_1947 : PdfReader {
1726+
public _PdfReader_1947(String baseArg1)
17271727
: base(baseArg1) {
17281728
}
17291729

@@ -1744,12 +1744,12 @@ public virtual void GetOriginalFileIdPdfDocumentNotReadTest() {
17441744
[NUnit.Framework.Test]
17451745
public virtual void GetOriginalFileIdReadingNotCompletedTest() {
17461746
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1747-
PdfReader getOriginalFileIdReader = new _PdfReader_1969(filename);
1747+
PdfReader getOriginalFileIdReader = new _PdfReader_1970(filename);
17481748
ReadingNotCompletedTest(getOriginalFileIdReader);
17491749
}
17501750

1751-
private sealed class _PdfReader_1969 : PdfReader {
1752-
public _PdfReader_1969(String baseArg1)
1751+
private sealed class _PdfReader_1970 : PdfReader {
1752+
public _PdfReader_1970(String baseArg1)
17531753
: base(baseArg1) {
17541754
}
17551755

@@ -1770,12 +1770,12 @@ public virtual void GetModifiedFileIdPdfDocumentNotReadTest() {
17701770
[NUnit.Framework.Test]
17711771
public virtual void GetModifiedFileIdReadingNotCompletedTest() {
17721772
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1773-
PdfReader getModifiedFileIdReader = new _PdfReader_1992(filename);
1773+
PdfReader getModifiedFileIdReader = new _PdfReader_1993(filename);
17741774
ReadingNotCompletedTest(getModifiedFileIdReader);
17751775
}
17761776

1777-
private sealed class _PdfReader_1992 : PdfReader {
1778-
public _PdfReader_1992(String baseArg1)
1777+
private sealed class _PdfReader_1993 : PdfReader {
1778+
public _PdfReader_1993(String baseArg1)
17791779
: base(baseArg1) {
17801780
}
17811781

@@ -1795,12 +1795,12 @@ public virtual void IsEncryptedPdfDocumentNotReadTest() {
17951795
[NUnit.Framework.Test]
17961796
public virtual void IsEncryptedReadingNotCompletedTest() {
17971797
String filename = SOURCE_FOLDER + "XrefWithNullOffsets.pdf";
1798-
PdfReader isEncryptedReader = new _PdfReader_2015(filename);
1798+
PdfReader isEncryptedReader = new _PdfReader_2016(filename);
17991799
ReadingNotCompletedTest(isEncryptedReader);
18001800
}
18011801

1802-
private sealed class _PdfReader_2015 : PdfReader {
1803-
public _PdfReader_2015(String baseArg1)
1802+
private sealed class _PdfReader_2016 : PdfReader {
1803+
public _PdfReader_2016(String baseArg1)
18041804
: base(baseArg1) {
18051805
}
18061806

@@ -2342,6 +2342,24 @@ public virtual void StreamWithoutEndstreamKeywordConservativeModeTest() {
23422342
}
23432343
}
23442344

2345+
[NUnit.Framework.Test]
2346+
public virtual void TokensPositionIsNotUpdatedWhileReadingLengthTest() {
2347+
String filename = SOURCE_FOLDER + "simpleDocWithIndirectLength.pdf";
2348+
using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(filename))) {
2349+
PdfTokenizer tokenizer = pdfDoc.GetReader().tokens;
2350+
// we will try to get the content stream object
2351+
// since it's not been gotten yet, iText will read this object,
2352+
// which will change the tokenizer's position
2353+
PdfStream pageContentStream = (PdfStream)pdfDoc.GetPdfObject(5);
2354+
// tokenizer's position after reading object should point to the end of the object's stream
2355+
NUnit.Framework.Assert.AreEqual(pageContentStream.GetOffset() + pageContentStream.GetLength(), tokenizer.GetPosition
2356+
());
2357+
// let's read next valid token and check that it means ending stream
2358+
tokenizer.NextValidToken();
2359+
tokenizer.TokenValueEqualsTo(ByteUtils.GetIsoBytes("endstream"));
2360+
}
2361+
}
2362+
23452363
private static PdfDictionary GetTestPdfDictionary() {
23462364
Dictionary<PdfName, PdfObject> tmpMap = new Dictionary<PdfName, PdfObject>();
23472365
tmpMap.Put(new PdfName("b"), new PdfName("c"));

itext/itext.kernel/itext/kernel/pdf/PdfReader.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -959,7 +959,9 @@ protected internal virtual PdfObject ReadObject(bool readAsDirect, bool objStm)
959959
if (ch != '\n') {
960960
tokens.BackOnePosition(ch);
961961
}
962-
return new PdfStream(tokens.GetPosition(), dict);
962+
PdfStream pdfStream = new PdfStream(tokens.GetPosition(), dict);
963+
tokens.Seek(pdfStream.GetOffset() + pdfStream.GetLength());
964+
return pdfStream;
963965
}
964966
else {
965967
tokens.Seek(pos);
@@ -1413,7 +1415,7 @@ protected internal virtual void RebuildXref() {
14131415
tokens.Seek(0);
14141416
trailer = null;
14151417
ByteBuffer buffer = new ByteBuffer(24);
1416-
PdfTokenizer lineTokeniser = new PdfTokenizer(new RandomAccessFileOrArray(new PdfReader.ReusableRandomAccessSource
1418+
PdfTokenizer lineTokenizer = new PdfTokenizer(new RandomAccessFileOrArray(new PdfReader.ReusableRandomAccessSource
14171419
(buffer)));
14181420
for (; ; ) {
14191421
long pos = tokens.GetPosition();
@@ -1444,7 +1446,7 @@ protected internal virtual void RebuildXref() {
14441446
}
14451447
else {
14461448
if (buffer.Get(0) >= '0' && buffer.Get(0) <= '9') {
1447-
int[] obj = PdfTokenizer.CheckObjectStart(lineTokeniser);
1449+
int[] obj = PdfTokenizer.CheckObjectStart(lineTokenizer);
14481450
if (obj == null) {
14491451
continue;
14501452
}

port-hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
206783fb3f1aad3ddc14fba91fddfd9cfc2d5925
1+
1953b3f0519c059fb438066102e090c396a051a4

0 commit comments

Comments
 (0)