From 9213da3184e4315a9f3c41cfd335c4847252806d Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Wed, 18 May 2022 22:47:45 +0200 Subject: [PATCH] TGAImageReader no longer reads single byte 0-terminator as Image Identification (cherry picked from commit 8a187f6657ce47660c68e19de17642541e4f611a) --- .../imageio/plugins/tga/TGAExtensions.java | 22 +--------------- .../imageio/plugins/tga/TGAHeader.java | 25 ++++++++++++++++--- .../imageio/plugins/tga/TGAMetadata.java | 4 +-- 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAExtensions.java b/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAExtensions.java index f9a43db9..a154a52d 100644 --- a/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAExtensions.java +++ b/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAExtensions.java @@ -33,10 +33,10 @@ package com.twelvemonkeys.imageio.plugins.tga; import javax.imageio.IIOException; import javax.imageio.stream.ImageInputStream; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.util.Calendar; import static com.twelvemonkeys.imageio.plugins.tga.TGA.EXT_AREA_SIZE; +import static com.twelvemonkeys.imageio.plugins.tga.TGAHeader.readString; /** * TGAExtensions. @@ -149,26 +149,6 @@ final class TGAExtensions { return calendar; } - private static String readString(final ImageInputStream stream, final int maxLength) throws IOException { - byte[] data = new byte[maxLength]; - stream.readFully(data); - - return asZeroTerminatedASCIIString(data); - } - - private static String asZeroTerminatedASCIIString(final byte[] data) { - int len = data.length; - - for (int i = 0; i < data.length; i++) { - if (data[i] == 0) { - len = i; - break; - } - } - - return new String(data, 0, len, StandardCharsets.US_ASCII); - } - public boolean hasAlpha() { switch (attributeType) { case 3: diff --git a/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAHeader.java b/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAHeader.java index e40e6fc6..ec0fbf4f 100755 --- a/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAHeader.java +++ b/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAHeader.java @@ -253,10 +253,7 @@ final class TGAHeader { // Image ID section, not *really* part of the header, but let's get rid of it... if (imageIdLength > 0) { - byte[] idBytes = new byte[imageIdLength]; - imageInput.readFully(idBytes); - - header.identification = new String(idBytes, StandardCharsets.US_ASCII); + header.identification = readString(imageInput, imageIdLength); } // Color map, not *really* part of the header @@ -267,6 +264,26 @@ final class TGAHeader { return header; } + static String readString(final ImageInputStream stream, final int maxLength) throws IOException { + byte[] data = new byte[maxLength]; + stream.readFully(data); + + return asZeroTerminatedASCIIString(data); + } + + private static String asZeroTerminatedASCIIString(final byte[] data) { + int len = data.length; + + for (int i = 0; i < data.length; i++) { + if (data[i] == 0) { + len = i; + break; + } + } + + return new String(data, 0, len, StandardCharsets.US_ASCII); + } + private static IndexColorModel readColorMap(final DataInput stream, final TGAHeader header) throws IOException { int size = header.colorMapSize; int depth = header.colorMapDepth; diff --git a/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAMetadata.java b/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAMetadata.java index 403e04b1..98a0a74f 100755 --- a/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAMetadata.java +++ b/imageio/imageio-tga/src/main/java/com/twelvemonkeys/imageio/plugins/tga/TGAMetadata.java @@ -291,9 +291,7 @@ final class TGAMetadata extends AbstractMetadata { IIOMetadataNode text = new IIOMetadataNode("Text"); // NOTE: Names corresponds to equivalent fields in TIFF - if (header.getIdentification() != null && !header.getIdentification().isEmpty()) { - appendTextEntry(text, "DocumentName", header.getIdentification()); - } + appendTextEntry(text, "DocumentName", header.getIdentification()); if (extensions != null) { appendTextEntry(text, "Software", extensions.getSoftwareVersion() == null ? extensions.getSoftware() : (extensions.getSoftware() + " " + extensions.getSoftwareVersion()));