Author: tilman
Date: Sat Nov  1 15:02:27 2025
New Revision: 1929463

Log:
PDFBOX-5660: close input, as suggested by Valery Bokov; refactor; closes #308

Modified:
   
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java

Modified: 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java
      Sat Nov  1 15:02:20 2025        (r1929462)
+++ 
pdfbox/branches/3.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactoryTest.java
      Sat Nov  1 15:02:27 2025        (r1929463)
@@ -19,7 +19,6 @@ import java.awt.Graphics;
 import java.awt.image.BufferedImage;
 
 import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -75,13 +74,16 @@ class JPEGFactoryTest
     @Test
     void testCreateFromStream() throws IOException
     {
-        PDDocument document = new PDDocument();
-        InputStream stream = 
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg");
-        PDImageXObject ximage = JPEGFactory.createFromStream(document, stream);
-        validate(ximage, 8, 344, 287, "jpg", PDDeviceRGB.INSTANCE.getName());
+        try (PDDocument document = new PDDocument();
+             InputStream is1 = 
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg");
+             InputStream is2 = 
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+        {
+            PDImageXObject ximage = JPEGFactory.createFromStream(document, 
is1);
+            validate(ximage, 8, 344, 287, "jpg", 
PDDeviceRGB.INSTANCE.getName());
 
-        doWritePDF(document, ximage, TESTRESULTSDIR, "jpegrgbstream.pdf");
-        checkJpegStream(TESTRESULTSDIR, "jpegrgbstream.pdf", 
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
+            doWritePDF(document, ximage, TESTRESULTSDIR, "jpegrgbstream.pdf");
+            checkJpegStream(TESTRESULTSDIR, "jpegrgbstream.pdf", is2);
+        }
     }
 
     /*
@@ -91,13 +93,16 @@ class JPEGFactoryTest
     @Test
     void testCreateFromStreamCMYK() throws IOException
     {
-        PDDocument document = new PDDocument();
-        InputStream stream = 
JPEGFactoryTest.class.getResourceAsStream("jpegcmyk.jpg");
-        PDImageXObject ximage = JPEGFactory.createFromStream(document, stream);
-        validate(ximage, 8, 343, 287, "jpg", PDDeviceCMYK.INSTANCE.getName());
+        try (InputStream is1 = 
JPEGFactoryTest.class.getResourceAsStream("jpegcmyk.jpg");
+             InputStream is2 = 
JPEGFactoryTest.class.getResourceAsStream("jpegcmyk.jpg"))
+        {
+            PDDocument document = new PDDocument();
+            PDImageXObject ximage = JPEGFactory.createFromStream(document, 
is1);
+            validate(ximage, 8, 343, 287, "jpg", 
PDDeviceCMYK.INSTANCE.getName());
 
-        doWritePDF(document, ximage, TESTRESULTSDIR, "jpegcmykstream.pdf");
-        checkJpegStream(TESTRESULTSDIR, "jpegcmykstream.pdf", 
JPEGFactoryTest.class.getResourceAsStream("jpegcmyk.jpg"));
+            doWritePDF(document, ximage, TESTRESULTSDIR, "jpegcmykstream.pdf");
+            checkJpegStream(TESTRESULTSDIR, "jpegcmykstream.pdf", is2);
+        }
     }
 
     /**
@@ -107,13 +112,16 @@ class JPEGFactoryTest
     @Test
     void testCreateFromStream256() throws IOException
     {
-        PDDocument document = new PDDocument();
-        InputStream stream = 
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg");
-        PDImageXObject ximage = JPEGFactory.createFromStream(document, stream);
-        validate(ximage, 8, 344, 287, "jpg", PDDeviceGray.INSTANCE.getName());
+        try (InputStream is1 = 
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg");
+             InputStream is2 = 
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg"))
+        {
+            PDDocument document = new PDDocument();
+            PDImageXObject ximage = JPEGFactory.createFromStream(document, 
is1);
+            validate(ximage, 8, 344, 287, "jpg", 
PDDeviceGray.INSTANCE.getName());
 
-        doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg256stream.pdf");
-        checkJpegStream(TESTRESULTSDIR, "jpeg256stream.pdf", 
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg"));
+            doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg256stream.pdf");
+            checkJpegStream(TESTRESULTSDIR, "jpeg256stream.pdf", is2);
+        }
     }
 
     /**
@@ -123,13 +131,16 @@ class JPEGFactoryTest
     @Test
     void testCreateFromImageRGB() throws IOException
     {
-        PDDocument document = new PDDocument();
-        BufferedImage image = 
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
-        assertEquals(3, image.getColorModel().getNumComponents());
-        PDImageXObject ximage = JPEGFactory.createFromImage(document, image);
-        validate(ximage, 8, 344, 287, "jpg", PDDeviceRGB.INSTANCE.getName());
+        try (InputStream is = 
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+        {
+            PDDocument document = new PDDocument();
+            BufferedImage image = ImageIO.read(is);
+            assertEquals(3, image.getColorModel().getNumComponents());
+            PDImageXObject ximage = JPEGFactory.createFromImage(document, 
image);
+            validate(ximage, 8, 344, 287, "jpg", 
PDDeviceRGB.INSTANCE.getName());
 
-        doWritePDF(document, ximage, TESTRESULTSDIR, "jpegrgb.pdf");
+            doWritePDF(document, ximage, TESTRESULTSDIR, "jpegrgb.pdf");
+        }
     }
 
     /**
@@ -139,13 +150,16 @@ class JPEGFactoryTest
     @Test
     void testCreateFromImage256() throws IOException
     {
-        PDDocument document = new PDDocument();
-        BufferedImage image = 
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg"));
-        assertEquals(1, image.getColorModel().getNumComponents());
-        PDImageXObject ximage = JPEGFactory.createFromImage(document, image);
-        validate(ximage, 8, 344, 287, "jpg", PDDeviceGray.INSTANCE.getName());
+        try (InputStream is = 
JPEGFactoryTest.class.getResourceAsStream("jpeg256.jpg"))
+        {
+            PDDocument document = new PDDocument();
+            BufferedImage image = ImageIO.read(is);
+            assertEquals(1, image.getColorModel().getNumComponents());
+            PDImageXObject ximage = JPEGFactory.createFromImage(document, 
image);
+            validate(ximage, 8, 344, 287, "jpg", 
PDDeviceGray.INSTANCE.getName());
 
-        doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg256.pdf");
+            doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg256.pdf");
+        }
     }
 
     /**
@@ -164,33 +178,35 @@ class JPEGFactoryTest
         {
             return;
         }
+        try (InputStream is = 
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+        {
+            PDDocument document = new PDDocument();
+            BufferedImage image = ImageIO.read(is);
 
-        PDDocument document = new PDDocument();
-        BufferedImage image = 
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
-
-        // create an ARGB image
-        int width = image.getWidth();
-        int height = image.getHeight();
-        BufferedImage argbImage = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_ARGB);
-        Graphics ag = argbImage.getGraphics();
-        ag.drawImage(image, 0, 0, null);
-        ag.dispose();
+            // create an ARGB image
+            int width = image.getWidth();
+            int height = image.getHeight();
+            BufferedImage argbImage = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_ARGB);
+            Graphics ag = argbImage.getGraphics();
+            ag.drawImage(image, 0, 0, null);
+            ag.dispose();
 
-        for (int x = 0; x < argbImage.getWidth(); ++x)
-        {
-            for (int y = 0; y < argbImage.getHeight(); ++y)
+            for (int x = 0; x < argbImage.getWidth(); ++x)
             {
-                argbImage.setRGB(x, y, (argbImage.getRGB(x, y) & 0xFFFFFF) | 
((y / 10 * 10) << 24));
+                for (int y = 0; y < argbImage.getHeight(); ++y)
+                {
+                    argbImage.setRGB(x, y, (argbImage.getRGB(x, y) & 0xFFFFFF) 
| ((y / 10 * 10) << 24));
+                }
             }
-        }
 
-        PDImageXObject ximage = JPEGFactory.createFromImage(document, 
argbImage);
-        validate(ximage, 8, width, height, "jpg", 
PDDeviceRGB.INSTANCE.getName());
-        assertNotNull(ximage.getSoftMask());
-        validate(ximage.getSoftMask(), 8, width, height, "jpg", 
PDDeviceGray.INSTANCE.getName());
-        assertTrue(colorCount(ximage.getSoftMask().getImage()) > 
image.getHeight() / 10);
+            PDImageXObject ximage = JPEGFactory.createFromImage(document, 
argbImage);
+            validate(ximage, 8, width, height, "jpg", 
PDDeviceRGB.INSTANCE.getName());
+            assertNotNull(ximage.getSoftMask());
+            validate(ximage.getSoftMask(), 8, width, height, "jpg", 
PDDeviceGray.INSTANCE.getName());
+            assertTrue(colorCount(ximage.getSoftMask().getImage()) > 
image.getHeight() / 10);
 
-        doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-intargb.pdf");
+            doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-intargb.pdf");
+        }
     }
 
     /**
@@ -209,33 +225,35 @@ class JPEGFactoryTest
         {
             return;
         }
+        try (InputStream is = 
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+        {
+            PDDocument document = new PDDocument();
+            BufferedImage image = ImageIO.read(is);
 
-        PDDocument document = new PDDocument();
-        BufferedImage image = 
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
-
-        // create an ARGB image
-        int width = image.getWidth();
-        int height = image.getHeight();
-        BufferedImage argbImage = new BufferedImage(width, height, 
BufferedImage.TYPE_4BYTE_ABGR);
-        Graphics ag = argbImage.getGraphics();
-        ag.drawImage(image, 0, 0, null);
-        ag.dispose();
+            // create an ARGB image
+            int width = image.getWidth();
+            int height = image.getHeight();
+            BufferedImage argbImage = new BufferedImage(width, height, 
BufferedImage.TYPE_4BYTE_ABGR);
+            Graphics ag = argbImage.getGraphics();
+            ag.drawImage(image, 0, 0, null);
+            ag.dispose();
 
-        for (int x = 0; x < argbImage.getWidth(); ++x)
-        {
-            for (int y = 0; y < argbImage.getHeight(); ++y)
+            for (int x = 0; x < argbImage.getWidth(); ++x)
             {
-                argbImage.setRGB(x, y, (argbImage.getRGB(x, y) & 0xFFFFFF) | 
((y / 10 * 10) << 24));
+                for (int y = 0; y < argbImage.getHeight(); ++y)
+                {
+                    argbImage.setRGB(x, y, (argbImage.getRGB(x, y) & 0xFFFFFF) 
| ((y / 10 * 10) << 24));
+                }
             }
-        }
 
-        PDImageXObject ximage = JPEGFactory.createFromImage(document, 
argbImage);
-        validate(ximage, 8, width, height, "jpg", 
PDDeviceRGB.INSTANCE.getName());
-        assertNotNull(ximage.getSoftMask());
-        validate(ximage.getSoftMask(), 8, width, height, "jpg", 
PDDeviceGray.INSTANCE.getName());
-        assertTrue(colorCount(ximage.getSoftMask().getImage()) > 
image.getHeight() / 10);
+            PDImageXObject ximage = JPEGFactory.createFromImage(document, 
argbImage);
+            validate(ximage, 8, width, height, "jpg", 
PDDeviceRGB.INSTANCE.getName());
+            assertNotNull(ximage.getSoftMask());
+            validate(ximage.getSoftMask(), 8, width, height, "jpg", 
PDDeviceGray.INSTANCE.getName());
+            assertTrue(colorCount(ximage.getSoftMask().getImage()) > 
image.getHeight() / 10);
 
-        doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-4bargb.pdf");
+            doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-4bargb.pdf");
+        }
     }
 
     /**
@@ -255,31 +273,33 @@ class JPEGFactoryTest
         {
             return;
         }
+        try (InputStream is = 
JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"))
+        {
+            PDDocument document = new PDDocument();
+            BufferedImage image = ImageIO.read(is);
 
-        PDDocument document = new PDDocument();
-        BufferedImage image = 
ImageIO.read(JPEGFactoryTest.class.getResourceAsStream("jpeg.jpg"));
-
-        // create an USHORT_555_RGB image
-        int width = image.getWidth();
-        int height = image.getHeight();
-        BufferedImage rgbImage = new BufferedImage(width, height, 
BufferedImage.TYPE_USHORT_555_RGB);
-        Graphics ag = rgbImage.getGraphics();
-        ag.drawImage(image, 0, 0, null);
-        ag.dispose();
+            // create an USHORT_555_RGB image
+            int width = image.getWidth();
+            int height = image.getHeight();
+            BufferedImage rgbImage = new BufferedImage(width, height, 
BufferedImage.TYPE_USHORT_555_RGB);
+            Graphics ag = rgbImage.getGraphics();
+            ag.drawImage(image, 0, 0, null);
+            ag.dispose();
 
-        for (int x = 0; x < rgbImage.getWidth(); ++x)
-        {
-            for (int y = 0; y < rgbImage.getHeight(); ++y)
+            for (int x = 0; x < rgbImage.getWidth(); ++x)
             {
-                rgbImage.setRGB(x, y, (rgbImage.getRGB(x, y) & 0xFFFFFF) | ((y 
/ 10 * 10) << 24));
+                for (int y = 0; y < rgbImage.getHeight(); ++y)
+                {
+                    rgbImage.setRGB(x, y, (rgbImage.getRGB(x, y) & 0xFFFFFF) | 
((y / 10 * 10) << 24));
+                }
             }
-        }
 
-        PDImageXObject ximage = JPEGFactory.createFromImage(document, 
rgbImage);
-        validate(ximage, 8, width, height, "jpg", 
PDDeviceRGB.INSTANCE.getName());
-        assertNull(ximage.getSoftMask());
+            PDImageXObject ximage = JPEGFactory.createFromImage(document, 
rgbImage);
+            validate(ximage, 8, width, height, "jpg", 
PDDeviceRGB.INSTANCE.getName());
+            assertNull(ximage.getSoftMask());
 
-        doWritePDF(document, ximage, TESTRESULTSDIR, "jpeg-ushort555rgb.pdf");
+            doWritePDF(document, ximage, TESTRESULTSDIR, 
"jpeg-ushort555rgb.pdf");
+        }
     }
 
     /**
@@ -305,22 +325,17 @@ class JPEGFactoryTest
 
     // check whether it is possible to extract the jpeg stream exactly 
     // as it was passed to createFromStream
-    private void checkJpegStream(File testResultsDir, String filename, 
InputStream resourceStream)
+    private void checkJpegStream(File testResultsDir, String filename, 
InputStream expected)
             throws IOException
     {
         try (PDDocument doc = Loader.loadPDF(new File(testResultsDir, 
filename)))
         {
             PDImageXObject img =
                     (PDImageXObject) 
doc.getPage(0).getResources().getXObject(COSName.getPDFName("Im1"));
-            ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
-            ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
             try (InputStream dctStream = 
img.createInputStream(Arrays.asList(COSName.DCT_DECODE.getName())))
             {
-                IOUtils.copy(resourceStream, baos1);
-                IOUtils.copy(dctStream, baos2);
+                assertArrayEquals(IOUtils.toByteArray(expected), 
IOUtils.toByteArray(dctStream));
             }
-            resourceStream.close();
-            assertArrayEquals(baos1.toByteArray(), baos2.toByteArray());
         }
     }
 }

Reply via email to