[freenet-cvs] r15774 - trunk/freenet/src/freenet/clients/http/filter

toad at freenetproject.org toad at freenetproject.org
Tue Nov 13 13:14:49 UTC 2007


Author: toad
Date: 2007-11-13 13:14:48 +0000 (Tue, 13 Nov 2007)
New Revision: 15774

Modified:
   trunk/freenet/src/freenet/clients/http/filter/JPEGFilter.java
Log:
If we are in scan-only mode, and there is data past EOI, switch to scan-copy mode to dump the excess data.
Will fix some perverse JPEGs.

Modified: trunk/freenet/src/freenet/clients/http/filter/JPEGFilter.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/filter/JPEGFilter.java	2007-11-12 23:53:28 UTC (rev 15773)
+++ trunk/freenet/src/freenet/clients/http/filter/JPEGFilter.java	2007-11-13 13:14:48 UTC (rev 15774)
@@ -98,7 +98,7 @@
 			
 			boolean finished = false;
 			int forceMarkerType = -1;
-			while(!finished) {
+			while(dos == null || !finished) {
 				if(baos != null)
 					baos.reset();
 				int markerType;
@@ -110,9 +110,13 @@
 					if(markerStart == -1) {
 						// No more chunks to scan.
 						break;
+					} else if(finished) {
+						if(logMINOR)
+							Logger.minor(this, "More data after EOI, copying to truncate");
+						return null;
 					}
 					if(markerStart != 0xFF) {
-						throwError("Invalid marker", "The file includes an invalid marker "+Integer.toHexString(markerStart)+" and cannot be parsed further.");
+						throwError("Invalid marker", "The file includes an invalid marker start "+Integer.toHexString(markerStart)+" and cannot be parsed further.");
 					}
 					if(baos != null) baos.write(0xFF);
 					markerType = dis.readUnsignedByte();
@@ -257,9 +261,7 @@
 					skipRest(blockLength, countAtStart, cis, dis, dos, "comment");
 				} else if(markerType == 0xD9) {
 					// End of image
-					if(dos != null) {
-						finished = true;
-					}
+					finished = true;
 					if(logMINOR)
 						Logger.minor(this, "End of image");
 				} else {




More information about the cvs mailing list