From b563f573de781219d7d3e5a7b591129be20b5ced Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Sat, 21 Nov 2020 20:49:21 +0100 Subject: [PATCH] Better input validation. --- .../imageio/plugins/iff/IFFImageMetadata.java | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageMetadata.java b/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageMetadata.java index 846c0f15..7ded0a4c 100644 --- a/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageMetadata.java +++ b/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageMetadata.java @@ -1,13 +1,16 @@ package com.twelvemonkeys.imageio.plugins.iff; +import com.twelvemonkeys.imageio.AbstractMetadata; + +import javax.imageio.metadata.IIOMetadataNode; import java.awt.*; import java.awt.image.IndexColorModel; import java.nio.charset.StandardCharsets; import java.util.List; -import javax.imageio.metadata.IIOMetadataNode; - -import com.twelvemonkeys.imageio.AbstractMetadata; +import static com.twelvemonkeys.imageio.plugins.iff.IFF.*; +import static com.twelvemonkeys.lang.Validate.isTrue; +import static com.twelvemonkeys.lang.Validate.notNull; final class IFFImageMetadata extends AbstractMetadata { private final int formType; @@ -17,13 +20,27 @@ final class IFFImageMetadata extends AbstractMetadata { private final List meta; IFFImageMetadata(int formType, BMHDChunk header, IndexColorModel colorMap, CAMGChunk viewPort, List meta) { - this.formType = formType; - this.header = header; + this.formType = isTrue(validFormType(formType), formType, "Unknown IFF Form type: %s"); + this.header = notNull(header, "header"); this.colorMap = colorMap; this.viewPort = viewPort; this.meta = meta; } + private boolean validFormType(int formType) { + switch (formType) { + case TYPE_ACBM: + case TYPE_DEEP: + case TYPE_ILBM: + case TYPE_PBM: + case TYPE_RGB8: + case TYPE_RGBN: + return true; + default: + return false; + } + } + @Override protected IIOMetadataNode getStandardChromaNode() { IIOMetadataNode chroma = new IIOMetadataNode("Chroma"); @@ -128,10 +145,10 @@ final class IFFImageMetadata extends AbstractMetadata { // PlanarConfiguration IIOMetadataNode planarConfiguration = new IIOMetadataNode("PlanarConfiguration"); switch (formType) { - case IFF.TYPE_PBM: + case TYPE_PBM: planarConfiguration.setAttribute("value", "PixelInterleaved"); break; - case IFF.TYPE_ILBM: + case TYPE_ILBM: planarConfiguration.setAttribute("value", "PlaneInterleaved"); break; default: