Skip to content

Commit ca2f714

Browse files
yulian-gaponenkoiText-CI
authored andcommitted
Throw exception if PdfReader instance is attempted to be reused between PdfDocument instances
ITXT-CR-938 Autoported commit. Original commit hash: [5ef108935]
1 parent eba374a commit ca2f714

File tree

4 files changed

+19
-1
lines changed

4 files changed

+19
-1
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,6 +1447,19 @@ public virtual void WrongStructureFlushingTest() {
14471447
pdfDoc.Close();
14481448
}
14491449

1450+
/// <exception cref="System.IO.IOException"/>
1451+
[NUnit.Framework.Test]
1452+
public virtual void ReaderReuseTest() {
1453+
NUnit.Framework.Assert.That(() => {
1454+
String filename = sourceFolder + "hello.pdf";
1455+
PdfReader reader = new PdfReader(filename);
1456+
PdfDocument pdfDoc1 = new PdfDocument(reader);
1457+
PdfDocument pdfDoc2 = new PdfDocument(reader);
1458+
}
1459+
, NUnit.Framework.Throws.InstanceOf<PdfException>().With.Message.EqualTo(PdfException.PdfReaderHasBeenAlreadyUtilized))
1460+
;
1461+
}
1462+
14501463
private bool ObjectTypeEqualTo(PdfObject @object, PdfName type) {
14511464
PdfName objectType = ((PdfDictionary)@object).GetAsName(PdfName.Type);
14521465
return type.Equals(objectType);

itext/itext.kernel/itext/kernel/PdfException.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,8 @@ public class PdfException : Exception {
389389

390390
public const String PdfPagesTreeCouldBeGeneratedOnlyOnce = "PdfPages tree could be generated only once.";
391391

392+
public const String PdfReaderHasBeenAlreadyUtilized = "Given PdfReader instance has already been utilized. The PdfReader cannot be reused, please create a new instance.";
393+
392394
public const String PdfStartxrefIsNotFollowedByANumber = "PDF startxref is not followed by a number.";
393395

394396
public const String PdfStartxrefNotFound = "PDF startxref not found.";

itext/itext.kernel/itext/kernel/pdf/PdfDocument.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,6 +1842,9 @@ protected internal virtual void Open(PdfVersion newPdfVersion) {
18421842
try {
18431843
EventCounterHandler.GetInstance().OnEvent(CoreEvent.PROCESS, properties.metaInfo, GetType());
18441844
if (reader != null) {
1845+
if (reader.pdfDocument != null) {
1846+
throw new PdfException(PdfException.PdfReaderHasBeenAlreadyUtilized);
1847+
}
18451848
reader.pdfDocument = this;
18461849
reader.ReadPdf();
18471850
foreach (ICounter counter in GetCounters()) {

port-hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0d18957af8d5ed66a1d178136cbec93ebbb2ac29
1+
5ef108935f7f77dc71b1fc1550df0c0e10a58696

0 commit comments

Comments
 (0)