Author: toad
Date: 2006-01-13 17:05:51 +0000 (Fri, 13 Jan 2006)
New Revision: 7850

Modified:
   trunk/freenet/src/freenet/client/Fetcher.java
   trunk/freenet/src/freenet/client/FileInserter.java
   trunk/freenet/src/freenet/client/Metadata.java
   trunk/freenet/src/freenet/node/Version.java
Log:
346: Fix data corruption (not marking compressed files as compressed).

Modified: trunk/freenet/src/freenet/client/Fetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/Fetcher.java       2006-01-12 23:15:21 UTC 
(rev 7849)
+++ trunk/freenet/src/freenet/client/Fetcher.java       2006-01-13 17:05:51 UTC 
(rev 7850)
@@ -276,7 +276,7 @@
                                } // else just fetch it, create context later
                        }
                        FetchResult fr = realRun(dm, recursionLevel, uri, 
dontEnterImplicitArchives, localOnly);
-                       if(metadata.compressed) {
+                       if(metadata.isCompressed()) {
                                Compressor codec = 
Compressor.getCompressionAlgorithmByMetadataID(metadata.compressionCodec);
                                Bucket data = fr.data;
                                Bucket output;
@@ -316,7 +316,8 @@

                        SplitFetcher sf = new SplitFetcher(metadata, 
archiveContext, newCtx, recursionLevel);
                        Bucket sfResult = sf.fetch(); // will throw in event of 
error
-                       if(metadata.compressed) {
+                       if(metadata.isCompressed()) {
+                               Logger.minor(this, "Is compressed: 
"+metadata.compressionCodec);
                                Compressor codec = 
Compressor.getCompressionAlgorithmByMetadataID(metadata.compressionCodec);
                                try {
                                        long maxLen = ctx.maxTempLength;
@@ -327,7 +328,8 @@
                                } catch (CompressionOutputSizeException e) {
                                        throw new 
FetchException(FetchException.TOO_BIG);
                                }
-                       }
+                       } else
+                               Logger.minor(this, "Not compressed 
("+metadata.compressionCodec+")");
                        return new FetchResult(dm, sfResult);
                } else {
                        Logger.error(this, "Don't know what to do with 
metadata: "+metadata);

Modified: trunk/freenet/src/freenet/client/FileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/FileInserter.java  2006-01-12 23:15:21 UTC 
(rev 7849)
+++ trunk/freenet/src/freenet/client/FileInserter.java  2006-01-13 17:05:51 UTC 
(rev 7850)
@@ -99,6 +99,7 @@
                                                data = result;
                                                if(bestCompressedData != null)
                                                        
ctx.bf.freeBucket(bestCompressedData);
+                                               bestCompressedData = data;
                                                break;
                                        }
                                        if(bestCompressedData != null && 
result.size() <  bestCompressedData.size()) {

Modified: trunk/freenet/src/freenet/client/Metadata.java
===================================================================
--- trunk/freenet/src/freenet/client/Metadata.java      2006-01-12 23:15:21 UTC 
(rev 7849)
+++ trunk/freenet/src/freenet/client/Metadata.java      2006-01-13 17:05:51 UTC 
(rev 7850)
@@ -76,6 +76,8 @@
                if(documentType < 0 || documentType > 5 || 
                                (documentType == ZIP_INTERNAL_REDIRECT && 
!acceptZipInternalRedirects))
                        throw new MetadataParseException("Unsupported document 
type: "+documentType);
+               
+               boolean compressed = false;
                if(documentType == SIMPLE_REDIRECT || documentType == 
MULTI_LEVEL_METADATA
                                || documentType == ZIP_MANIFEST) {
                        short flags = dis.readShort();
@@ -500,8 +502,6 @@
        boolean fullKeys;
        /** Non-final splitfile chunks can be non-full */
        boolean splitUseLengths;
-       /** Compressed splitfile */
-       boolean compressed;
        static final short FLAGS_SPLITFILE = 1;
        static final short FLAGS_DBR = 2;
        static final short FLAGS_NO_MIME = 4;
@@ -672,7 +672,7 @@
                        if(extraMetadata) flags |= FLAGS_EXTRA_METADATA;
                        if(fullKeys) flags |= FLAGS_FULL_KEYS;
                        if(splitUseLengths) flags |= FLAGS_SPLIT_USE_LENGTHS;
-                       if(compressed) flags |= FLAGS_COMPRESSED;
+                       if(compressionCodec >= 0) flags |= FLAGS_COMPRESSED;
                        dos.writeShort(flags);
                }

@@ -684,7 +684,7 @@
                        dos.writeLong(dataLength);
                }

-               if(compressed) {
+               if(compressionCodec >= 0) {
                        dos.writeShort(compressionCodec);
                        dos.writeLong(decompressedLength);
                }
@@ -765,4 +765,8 @@
        public FreenetURI[] getSplitfileCheckKeys() {
                return splitfileCheckKeys;
        }
+
+       public boolean isCompressed() {
+               return compressionCodec >= 0;
+       }
 }

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-01-12 23:15:21 UTC (rev 
7849)
+++ trunk/freenet/src/freenet/node/Version.java 2006-01-13 17:05:51 UTC (rev 
7850)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       public static final int buildNumber = 345;
+       public static final int buildNumber = 346;

        /** Oldest build of Fred we will talk to */
        public static final int lastGoodBuild = 344;


Reply via email to