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))