From 9720a931c511b706e56ac60cb968ae2dcf4a8785 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 20 Oct 2023 12:26:36 +0200 Subject: [PATCH] #843: Correctly handle empty image resources section. --- .../imageio/plugins/psd/PSDImageReader.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReader.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReader.java index 7ce65f5f..4e125531 100644 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReader.java +++ b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReader.java @@ -864,21 +864,27 @@ public final class PSDImageReader extends ImageReaderBase { long imageResourcesLength = imageInput.readUnsignedInt(); - if (pParseData && metadata.imageResources == null && imageResourcesLength > 0) { - long expectedEnd = imageInput.getStreamPosition() + imageResourcesLength; - metadata.imageResources = new ArrayList<>(); - - while (imageInput.getStreamPosition() < expectedEnd) { - PSDImageResource resource = PSDImageResource.read(imageInput); - metadata.imageResources.add(resource); + if (pParseData && metadata.imageResources == null) { + if (imageResourcesLength == 0) { + metadata.imageResources = Collections.emptyList(); } + else { + metadata.imageResources = new ArrayList<>(); - if (DEBUG) { - System.out.println("imageResources: " + metadata.imageResources); - } + long expectedEnd = imageInput.getStreamPosition() + imageResourcesLength; - if (imageInput.getStreamPosition() != expectedEnd) { - throw new IIOException("Corrupt PSD document"); // ..or maybe just a bug in the reader.. ;-) + while (imageInput.getStreamPosition() < expectedEnd) { + PSDImageResource resource = PSDImageResource.read(imageInput); + metadata.imageResources.add(resource); + } + + if (DEBUG) { + System.out.println("imageResources: " + metadata.imageResources); + } + + if (imageInput.getStreamPosition() != expectedEnd) { + throw new IIOException("Corrupt PSD document"); // ..or maybe just a bug in the reader.. ;-) + } } }