Skip to content

Commit 0527a1e

Browse files
Egor MartsynkovskyiText-CI
authored andcommitted
Fix OOM on reading raw bytes stream
DEVSIX-6244 Autoported commit. Original commit hash: [321336392]
1 parent d5dc7ad commit 0527a1e

File tree

7 files changed

+93
-56
lines changed

7 files changed

+93
-56
lines changed

itext.tests/itext.kernel.tests/itext/kernel/pdf/PdfReaderDecodeTest.cs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ source product.
4848

4949
namespace iText.Kernel.Pdf {
5050
public class PdfReaderDecodeTest : ExtendedITextTest {
51-
public static readonly String sourceFolder = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
51+
public static readonly String SOURCE_FOLDER = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
5252
.CurrentContext.TestDirectory) + "/resources/itext/kernel/pdf/PdfReaderDecodeTest/";
5353

5454
[NUnit.Framework.Test]
5555
public virtual void NoMemoryHandlerTest() {
5656
using (PdfDocument pdfDocument = new PdfDocument(new PdfWriter(new MemoryStream()))) {
57-
using (FileStream @is = new FileStream(sourceFolder + "stream", FileMode.Open, FileAccess.Read)) {
57+
using (FileStream @is = new FileStream(SOURCE_FOLDER + "stream", FileMode.Open, FileAccess.Read)) {
5858
byte[] b = new byte[51];
5959
@is.Read(b);
6060
PdfArray array = new PdfArray();
@@ -78,7 +78,7 @@ public virtual void NoMemoryHandlerTest() {
7878
[LogMessage(iText.IO.Logs.IoLogMessageConstant.INVALID_INDIRECT_REFERENCE)]
7979
[LogMessage(iText.IO.Logs.IoLogMessageConstant.XREF_ERROR_WHILE_READING_TABLE_WILL_BE_REBUILT)]
8080
public virtual void DefaultMemoryHandlerTest() {
81-
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "timing.pdf"), new PdfWriter
81+
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE_FOLDER + "timing.pdf"), new PdfWriter
8282
(new MemoryStream()))) {
8383
PdfStream stream = pdfDocument.GetFirstPage().GetContentStream(0);
8484
byte[] b = stream.GetBytes(false);
@@ -100,7 +100,7 @@ public virtual void DefaultMemoryHandlerTest() {
100100
public virtual void CustomMemoryHandlerSingleTest() {
101101
MemoryLimitsAwareHandler handler = new MemoryLimitsAwareHandler();
102102
handler.SetMaxSizeOfSingleDecompressedPdfStream(1000);
103-
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "timing.pdf", new ReaderProperties
103+
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE_FOLDER + "timing.pdf", new ReaderProperties
104104
().SetMemoryLimitsAwareHandler(handler)), new PdfWriter(new MemoryStream()))) {
105105
PdfStream stream = pdfDocument.GetFirstPage().GetContentStream(0);
106106
byte[] b = stream.GetBytes(false);
@@ -125,15 +125,15 @@ public virtual void CustomMemoryHandlerSingleTest() {
125125
public virtual void OneFilterCustomMemoryHandlerSingleTest() {
126126
MemoryLimitsAwareHandler handler = new MemoryLimitsAwareHandler();
127127
handler.SetMaxSizeOfSingleDecompressedPdfStream(20);
128-
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "timing.pdf", new ReaderProperties
128+
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE_FOLDER + "timing.pdf", new ReaderProperties
129129
().SetMemoryLimitsAwareHandler(handler)), new PdfWriter(new MemoryStream()))) {
130130
PdfStream stream = pdfDocument.GetFirstPage().GetContentStream(0);
131131
byte[] b = stream.GetBytes(false);
132132
PdfArray array = new PdfArray();
133133
stream.Put(PdfName.Filter, array);
134-
// Limit is reached, but the stream has no filters. Therefore we don't consider ot to be suspicious
134+
// Limit is reached, but the stream has no filters. Therefore, we don't consider it to be suspicious.
135135
NUnit.Framework.Assert.AreEqual(51, PdfReader.DecodeBytes(b, stream).Length);
136-
// Limit is reached, but the stream has only one filter. Therefore we don't consider ot to be suspicious
136+
// Limit is reached, but the stream has only one filter. Therefore, we don't consider it to be suspicious.
137137
array.Add(PdfName.Fl);
138138
NUnit.Framework.Assert.AreEqual(40, PdfReader.DecodeBytes(b, stream).Length);
139139
}
@@ -145,14 +145,14 @@ public virtual void OneFilterCustomMemoryHandlerSingleTest() {
145145
public virtual void OverriddenMemoryHandlerAllStreamsAreSuspiciousTest() {
146146
MemoryLimitsAwareHandler handler = new _MemoryLimitsAwareHandler_194();
147147
handler.SetMaxSizeOfSingleDecompressedPdfStream(20);
148-
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "timing.pdf", new ReaderProperties
148+
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE_FOLDER + "timing.pdf", new ReaderProperties
149149
().SetMemoryLimitsAwareHandler(handler)), new PdfWriter(new MemoryStream()))) {
150150
PdfStream stream = pdfDocument.GetFirstPage().GetContentStream(0);
151151
byte[] b = stream.GetBytes(false);
152152
PdfArray array = new PdfArray();
153153
stream.Put(PdfName.Filter, array);
154154
array.Add(PdfName.Fl);
155-
// Limit is reached, and the stream with one filter is considered to be suspicious
155+
// Limit is reached, and the stream with one filter is considered to be suspicious.
156156
Exception e = NUnit.Framework.Assert.Catch(typeof(MemoryLimitsAwareException), () => PdfReader.DecodeBytes
157157
(b, stream));
158158
NUnit.Framework.Assert.AreEqual(KernelExceptionMessageConstant.DURING_DECOMPRESSION_SINGLE_STREAM_OCCUPIED_MORE_MEMORY_THAN_ALLOWED
@@ -175,16 +175,15 @@ public override bool IsMemoryLimitsAwarenessRequiredOnDecompression(PdfArray fil
175175
public virtual void OverriddenMemoryHandlerNoStreamsAreSuspiciousTest() {
176176
MemoryLimitsAwareHandler handler = new _MemoryLimitsAwareHandler_229();
177177
handler.SetMaxSizeOfSingleDecompressedPdfStream(20);
178-
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "timing.pdf", new ReaderProperties
178+
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE_FOLDER + "timing.pdf", new ReaderProperties
179179
().SetMemoryLimitsAwareHandler(handler)), new PdfWriter(new MemoryStream()))) {
180180
PdfStream stream = pdfDocument.GetFirstPage().GetContentStream(0);
181181
byte[] b = stream.GetBytes(false);
182182
PdfArray array = new PdfArray();
183183
stream.Put(PdfName.Filter, array);
184184
array.Add(PdfName.Fl);
185185
array.Add(PdfName.Fl);
186-
// Limit is reached but the stream with several copies of the filter is not considered
187-
// to be suspicious
186+
// Limit is reached but the stream with several copies of the filter is not considered to be suspicious.
188187
PdfReader.DecodeBytes(b, stream);
189188
}
190189
}
@@ -217,7 +216,7 @@ public virtual void DifferentFiltersEmptyTest() {
217216
public virtual void CustomMemoryHandlerSumTest() {
218217
MemoryLimitsAwareHandler handler = new MemoryLimitsAwareHandler();
219218
handler.SetMaxSizeOfDecompressedPdfStreamsSum(100000);
220-
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "timing.pdf", new ReaderProperties
219+
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE_FOLDER + "timing.pdf", new ReaderProperties
221220
().SetMemoryLimitsAwareHandler(handler)), new PdfWriter(new MemoryStream()))) {
222221
PdfStream stream = pdfDocument.GetFirstPage().GetContentStream(0);
223222
byte[] b = stream.GetBytes(false);
@@ -234,7 +233,7 @@ public virtual void CustomMemoryHandlerSumTest() {
234233
public virtual void PageSumTest() {
235234
MemoryLimitsAwareHandler handler = new MemoryLimitsAwareHandler();
236235
handler.SetMaxSizeOfDecompressedPdfStreamsSum(1500000);
237-
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "timing.pdf", new ReaderProperties
236+
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE_FOLDER + "timing.pdf", new ReaderProperties
238237
().SetMemoryLimitsAwareHandler(handler)), new PdfWriter(new MemoryStream()))) {
239238
Exception e = NUnit.Framework.Assert.Catch(typeof(MemoryLimitsAwareException), () => pdfDocument.GetFirstPage
240239
().GetContentBytes());
@@ -249,7 +248,7 @@ public virtual void PageSumTest() {
249248
public virtual void PageAsSingleStreamTest() {
250249
MemoryLimitsAwareHandler handler = new MemoryLimitsAwareHandler();
251250
handler.SetMaxSizeOfSingleDecompressedPdfStream(1500000);
252-
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(sourceFolder + "timing.pdf", new ReaderProperties
251+
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE_FOLDER + "timing.pdf", new ReaderProperties
253252
().SetMemoryLimitsAwareHandler(handler)), new PdfWriter(new MemoryStream()))) {
254253
Exception e = NUnit.Framework.Assert.Catch(typeof(MemoryLimitsAwareException), () => pdfDocument.GetFirstPage
255254
().GetContentBytes());

0 commit comments

Comments
 (0)