You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sanselan-commits@incubator.apache.org by cm...@apache.org on 2008/07/13 19:52:40 UTC
svn commit: r676420 -
/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java
Author: cmchen
Date: Sun Jul 13 12:52:39 2008
New Revision: 676420
URL: http://svn.apache.org/viewvc?rev=676420&view=rev
Log:
Fixed a bug introduced in recent patch around TIFF-structured data (ie. EXIF data) with invalid field tags.
Modified:
incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java?rev=676420&r1=676419&r2=676420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java Sun Jul 13 12:52:39 2008
@@ -108,9 +108,13 @@
Number key = new Integer(offset);
// Debug.debug();
-// Debug.debug("offset", offset);
-// Debug.debug("key", key);
- // Debug.debug("visited", visited);
+// Debug.debug("dir offset", offset + " (0x" + Integer.toHexString(offset)
+// + ")");
+// Debug.debug("dir key", key);
+// Debug.debug("dir visited", visited);
+// Debug.debug("dirType", dirType);
+// Debug.debug();
+
if (visited.contains(key))
return false;
visited.add(key);
@@ -123,16 +127,12 @@
ArrayList fields = new ArrayList();
- // Debug.debug();
- // Debug.debug("dirType", dirType);
- // Debug.debug("offset", offset);
- //
- // if(offset>=byteSource.getLength())
- // {
- // Debug.debug("skipping invalid directory!");
- // return true;
- // }
-
+
+ if (offset >= byteSource.getLength()) {
+ Debug.debug("skipping invalid directory!");
+ return true;
+ }
+
int entryCount;
try {
entryCount = read2Bytes("DirectoryEntryCount", is,
@@ -144,21 +144,13 @@
return true;
}
- // Debug.debug("entryCount", entryCount);
+// Debug.debug("entryCount", entryCount);
for (int i = 0; i < entryCount; i++) {
int tag = read2Bytes("Tag", is, "Not a Valid TIFF File");
int type = read2Bytes("Type", is, "Not a Valid TIFF File");
int length = read4Bytes("Length", is, "Not a Valid TIFF File");
- if (tag == 0) {
- // skip invalid fields.
- // These are seen very rarely, but can have invalid value
- // lengths,
- // which can cause OOM problems.
- continue;
- }
-
// Debug.debug("tag*", tag + " (0x" + Integer.toHexString(tag)
// + ")");
@@ -167,6 +159,14 @@
int valueOffset = convertByteArrayToInt("ValueOffset",
valueOffsetBytes);
+ if (tag == 0) {
+ // skip invalid fields.
+ // These are seen very rarely, but can have invalid value
+ // lengths,
+ // which can cause OOM problems.
+ continue;
+ }
+
// if (keepField(tag, tags))
// {
TiffField field = new TiffField(tag, dirType, type, length,
@@ -177,6 +177,8 @@
field.fillInValue(byteSource);
+// Debug.debug("\t" + "value", field.getValueDescription());
+
fields.add(field);
if (!listener.addField(field))