Fix some bugs found by Findbugs.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/sanselan/trunk@1291921 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/commons/sanselan/ImageParser.java b/src/main/java/org/apache/commons/sanselan/ImageParser.java
index 48c5ca0..7479324 100644
--- a/src/main/java/org/apache/commons/sanselan/ImageParser.java
+++ b/src/main/java/org/apache/commons/sanselan/ImageParser.java
@@ -82,7 +82,7 @@
public final IImageMetadata getMetadata(byte bytes[])
throws ImageReadException, IOException
{
- return getMetadata(bytes);
+ return getMetadata(bytes, null);
}
public final IImageMetadata getMetadata(byte bytes[], Map params)
diff --git a/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java b/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java
index 9761e7d..4790d0c 100644
--- a/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java
+++ b/src/main/java/org/apache/commons/sanselan/common/BinaryConstant.java
@@ -29,7 +29,7 @@
@Override
public BinaryConstant clone() throws CloneNotSupportedException {
- return new BinaryConstant(value);
+ return (BinaryConstant) super.clone();
}
@Override
diff --git a/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java b/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java
index 208f815..efeab86 100644
--- a/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java
+++ b/src/main/java/org/apache/commons/sanselan/common/BinaryFileFunctions.java
@@ -761,7 +761,7 @@
System.out.println(msg + ": '" + Integer.toBinaryString(0xff & i));
}
- public final static int CharsToQuad(char c1, char c2, char c3, char c4)
+ public final static int charsToQuad(char c1, char c2, char c3, char c4)
{
return (((0xff & c1) << 24) | ((0xff & c2) << 16) | ((0xff & c3) << 8) | ((0xff & c4) << 0));
}
diff --git a/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java b/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java
index b970550..d682202 100644
--- a/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java
+++ b/src/main/java/org/apache/commons/sanselan/common/BinaryInputStream.java
@@ -630,7 +630,7 @@
System.out.println(msg + ": '" + Integer.toBinaryString(0xff & i));
}
- protected final static int CharsToQuad(char c1, char c2, char c3, char c4)
+ protected final static int charsToQuad(char c1, char c2, char c3, char c4)
{
return (((0xff & c1) << 24) | ((0xff & c2) << 16) | ((0xff & c3) << 8) | ((0xff & c4) << 0));
}
diff --git a/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java b/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java
index 4d5295f..4475900 100644
--- a/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java
+++ b/src/main/java/org/apache/commons/sanselan/common/bytesource/ByteSourceInputStream.java
@@ -180,7 +180,12 @@
}
InputStream is = getInputStream();
- is.skip(blockStart);
+ for (long skipped = 0; skipped < blockStart; ) {
+ long ret = is.skip(blockStart - skipped);
+ if (ret >= 0) {
+ skipped += ret;
+ }
+ }
byte bytes[] = new byte[blockLength];
int total = 0;
diff --git a/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java b/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java
index 3b13dc0..f07ee32 100644
--- a/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java
+++ b/src/main/java/org/apache/commons/sanselan/common/itu_t4/T4AndT6Compression.java
@@ -641,7 +641,7 @@
int first = 0;
int last = entries.length - 1;
do {
- int middle = (first + last) / 2;
+ int middle = (first + last) >>> 2;
if (entries[middle].value.intValue() <= value &&
((middle + 1) >= entries.length || value < entries[middle + 1].value.intValue())) {
return entries[middle];
diff --git a/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java b/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java
index 35a014a..e88f463 100644
--- a/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java
+++ b/src/main/java/org/apache/commons/sanselan/common/mylzw/MyLzwCompressor.java
@@ -133,19 +133,22 @@
public final boolean equals(Object o)
{
- ByteArray other = (ByteArray) o;
- if (other.hash != hash)
- return false;
- if (other.length != length)
- return false;
-
- for (int i = 0; i < length; i++)
- {
- if (other.bytes[i + other.start] != bytes[i + start])
+ if (o instanceof ByteArray) {
+ ByteArray other = (ByteArray) o;
+ if (other.hash != hash)
return false;
- }
+ if (other.length != length)
+ return false;
- return true;
+ for (int i = 0; i < length; i++)
+ {
+ if (other.bytes[i + other.start] != bytes[i + start])
+ return false;
+ }
+
+ return true;
+ }
+ return false;
}
}
diff --git a/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java b/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java
index 1a580c7..a200fd4 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/jpeg/segments/App2Segment.java
@@ -64,6 +64,20 @@
icc_bytes = null;
}
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof App2Segment) {
+ App2Segment other = (App2Segment)obj;
+ return cur_marker == other.cur_marker;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return cur_marker;
+ }
public int compareTo(App2Segment other)
{
diff --git a/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java b/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java
index a5b8952..2197e54 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/png/PngConstants.java
@@ -17,6 +17,7 @@
package org.apache.commons.sanselan.formats.png;
import org.apache.commons.sanselan.SanselanConstants;
+import org.apache.commons.sanselan.common.BinaryFileFunctions;
public interface PngConstants extends SanselanConstants
{
@@ -46,31 +47,31 @@
0x74, //
};
- public final static int IEND = PngImageParser.CharsToQuad('I', 'E', 'N',
+ public final static int IEND = BinaryFileFunctions.charsToQuad('I', 'E', 'N',
'D');
- public final static int IHDR = PngImageParser.CharsToQuad('I', 'H', 'D',
+ public final static int IHDR = BinaryFileFunctions.charsToQuad('I', 'H', 'D',
'R');
- public final static int iCCP = PngImageParser.CharsToQuad('i', 'C', 'C',
+ public final static int iCCP = BinaryFileFunctions.charsToQuad('i', 'C', 'C',
'P');
- public final static int tEXt = PngImageParser.CharsToQuad('t', 'E', 'X',
+ public final static int tEXt = BinaryFileFunctions.charsToQuad('t', 'E', 'X',
't');
- public final static int zTXt = PngImageParser.CharsToQuad('z', 'T', 'X',
+ public final static int zTXt = BinaryFileFunctions.charsToQuad('z', 'T', 'X',
't');
- public final static int pHYs = PngImageParser.CharsToQuad('p', 'H', 'Y',
+ public final static int pHYs = BinaryFileFunctions.charsToQuad('p', 'H', 'Y',
's');
- public final static int PLTE = PngImageParser.CharsToQuad('P', 'L', 'T',
+ public final static int PLTE = BinaryFileFunctions.charsToQuad('P', 'L', 'T',
'E');
- public final static int IDAT = PngImageParser.CharsToQuad('I', 'D', 'A',
+ public final static int IDAT = BinaryFileFunctions.charsToQuad('I', 'D', 'A',
'T');
- public final static int tRNS = PngImageParser.CharsToQuad('t', 'R', 'N',
+ public final static int tRNS = BinaryFileFunctions.charsToQuad('t', 'R', 'N',
'S');
- public final static int gAMA = PngImageParser.CharsToQuad('g', 'A', 'M',
+ public final static int gAMA = BinaryFileFunctions.charsToQuad('g', 'A', 'M',
'A');
- public final static int sRGB = PngImageParser.CharsToQuad('s', 'R', 'G',
+ public final static int sRGB = BinaryFileFunctions.charsToQuad('s', 'R', 'G',
'B');
// XMP chunk type.
- public final static int iTXt = PngImageParser.CharsToQuad('i', 'T', 'X',
+ public final static int iTXt = BinaryFileFunctions.charsToQuad('i', 'T', 'X',
't');
public static final byte PNG_Signature[] = {
diff --git a/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java b/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java
index ddaf496..5b9430e 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/pnm/PnmImageParser.java
@@ -330,7 +330,11 @@
writer = new PpmWriter(useRawbits);
// make copy of params; we'll clear keys as we consume them.
- params = new HashMap(params);
+ if (params != null) {
+ params = new HashMap(params);
+ } else {
+ params = new HashMap();
+ }
// clear format key.
if (params.containsKey(PARAM_KEY_FORMAT))
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java
index 9edf504..0f5d86b 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/TiffReader.java
@@ -137,8 +137,14 @@
try
{
is = byteSource.getInputStream();
- if (offset > 0)
- is.skip(offset);
+ if (offset > 0) {
+ for (long skipped = 0; skipped < offset; ) {
+ long ret = is.skip(offset - skipped);
+ if (ret >= 0) {
+ skipped += ret;
+ }
+ }
+ }
List<TiffField> fields = new ArrayList<TiffField>();
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java
index 811b6a1..1535c4c 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/fieldtypes/FieldTypeAscii.java
@@ -91,7 +91,12 @@
String[] strings = (String[])o;
int totalLength = 0;
for (int i = 0; i < strings.length; i++) {
- totalLength += (strings[i].getBytes().length + 1);
+ byte[] bytes = null;
+ try {
+ bytes = strings[i].getBytes("UTF-8");
+ } catch (UnsupportedEncodingException cannotHappen) {
+ }
+ totalLength += (bytes.length + 1);
}
byte[] result = new byte[totalLength];
int position = 0;
diff --git a/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java b/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java
index 56b33e3..7572acd 100644
--- a/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java
+++ b/src/main/java/org/apache/commons/sanselan/icc/IccProfileParser.java
@@ -370,7 +370,7 @@
boolean result = ((DeviceManufacturer == IEC) && (DeviceModel == sRGB));
- return new Boolean(result);
+ return result;
}
catch (Exception e)
{
diff --git a/src/main/java/org/apache/commons/sanselan/icc/IccTag.java b/src/main/java/org/apache/commons/sanselan/icc/IccTag.java
index e567657..1860f43 100644
--- a/src/main/java/org/apache/commons/sanselan/icc/IccTag.java
+++ b/src/main/java/org/apache/commons/sanselan/icc/IccTag.java
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
+import java.util.Arrays;
import org.apache.commons.sanselan.ImageReadException;
import org.apache.commons.sanselan.common.BinaryConstants;
@@ -97,7 +98,7 @@
}) + ")");
if (data == null)
- pw.println(prefix + "data: " + data);
+ pw.println(prefix + "data: " + Arrays.toString(data));
else
{
pw.println(prefix + "data: " + data.length);
diff --git a/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java b/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java
index cbef8e1..6173cd2 100644
--- a/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java
+++ b/src/main/java/org/apache/commons/sanselan/palette/ColorSpaceSubset.java
@@ -173,5 +173,5 @@
{
index = i;
}
-
+
}
\ No newline at end of file
diff --git a/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java b/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java
index 873094f..4155bf0 100644
--- a/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java
+++ b/src/main/java/org/apache/commons/sanselan/palette/MedianCutQuantizer.java
@@ -61,8 +61,11 @@
public boolean equals(Object o)
{
- ColorCount other = (ColorCount) o;
- return other.argb == this.argb;
+ if (o instanceof ColorCount) {
+ ColorCount other = (ColorCount) o;
+ return other.argb == this.argb;
+ }
+ return false;
}
}
diff --git a/src/main/java/org/apache/commons/sanselan/util/Debug.java b/src/main/java/org/apache/commons/sanselan/util/Debug.java
index 88c3120..1c6d368 100644
--- a/src/main/java/org/apache/commons/sanselan/util/Debug.java
+++ b/src/main/java/org/apache/commons/sanselan/util/Debug.java
@@ -208,7 +208,7 @@
}
// public static String newline = System.getProperty("line.separator");
- public static String newline = "\r\n";
+ public static final String newline = "\r\n";
private static void log(StringBuffer buffer, String s)
{
@@ -517,9 +517,6 @@
debug(fClass.getName(), e);
}
- private static final SimpleDateFormat timestamp = new SimpleDateFormat(
- "yyyy-MM-dd kk:mm:ss:SSS");
-
public static void debug(String message, boolean value)
{
debug(message + " " + ((value) ? ("true") : ("false")));
@@ -662,6 +659,8 @@
{
StringBuffer result = new StringBuffer();
+ final SimpleDateFormat timestamp = new SimpleDateFormat(
+ "yyyy-MM-dd kk:mm:ss:SSS");
String datetime = timestamp.format(new Date()).toLowerCase();
result.append(newline);
@@ -869,7 +868,7 @@
for (int i = 0; i < array.length; i++)
debug(prefix + "\t" + i + ": ", array[i]);
}
- else if (value instanceof byte[])
+ else if (value instanceof double[])
{
double[] array = (double[]) value;
debug(prefix, array);
diff --git a/src/main/java/org/apache/commons/sanselan/util/IoUtils.java b/src/main/java/org/apache/commons/sanselan/util/IoUtils.java
index ae60437..9978ac8 100644
--- a/src/main/java/org/apache/commons/sanselan/util/IoUtils.java
+++ b/src/main/java/org/apache/commons/sanselan/util/IoUtils.java
@@ -142,8 +142,11 @@
try
{
- if (file.getParentFile() != null)
- file.getParentFile().mkdirs();
+ if (file.getParentFile() != null && !file.getParentFile().exists()) {
+ if (!file.getParentFile().mkdirs()) {
+ throw new IOException("Could not create directory for file " + file);
+ }
+ }
stream = new FileOutputStream(file);
copyStreamToStream(src, stream);