You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by su...@apache.org on 2012/10/23 04:28:59 UTC
svn commit: r1401143 - in /hadoop/common/branches/branch-1: CHANGES.txt
src/core/org/apache/hadoop/io/compress/zlib/BuiltInGzipDecompressor.java
src/test/org/apache/hadoop/io/compress/TestCodec.java
src/test/org/apache/hadoop/io/file/tfile/TestVLong.java
Author: suresh
Date: Tue Oct 23 02:28:59 2012
New Revision: 1401143
URL: http://svn.apache.org/viewvc?rev=1401143&view=rev
Log:
HADOOP-8900. BuiltInGzipDecompressor throws IOException - stored gzip size doesn't match decompressed size. Contributed by Andy Isaacson.
Modified:
hadoop/common/branches/branch-1/CHANGES.txt
hadoop/common/branches/branch-1/src/core/org/apache/hadoop/io/compress/zlib/BuiltInGzipDecompressor.java
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/compress/TestCodec.java
hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/file/tfile/TestVLong.java
Modified: hadoop/common/branches/branch-1/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/CHANGES.txt?rev=1401143&r1=1401142&r2=1401143&view=diff
==============================================================================
--- hadoop/common/branches/branch-1/CHANGES.txt (original)
+++ hadoop/common/branches/branch-1/CHANGES.txt Tue Oct 23 02:28:59 2012
@@ -280,6 +280,9 @@ Release 1.2.0 - unreleased
HADOOP-8951. RunJar to fail with user-comprehensible error
message if jar missing. (stevel via suresh)
+ HADOOP-8900. BuiltInGzipDecompressor throws IOException - stored gzip size
+ doesn't match decompressed size. (Andy Isaacson via suresh)
+
Release 1.1.1 - Unreleased
INCOMPATIBLE CHANGES
Modified: hadoop/common/branches/branch-1/src/core/org/apache/hadoop/io/compress/zlib/BuiltInGzipDecompressor.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/core/org/apache/hadoop/io/compress/zlib/BuiltInGzipDecompressor.java?rev=1401143&r1=1401142&r2=1401143&view=diff
==============================================================================
--- hadoop/common/branches/branch-1/src/core/org/apache/hadoop/io/compress/zlib/BuiltInGzipDecompressor.java (original)
+++ hadoop/common/branches/branch-1/src/core/org/apache/hadoop/io/compress/zlib/BuiltInGzipDecompressor.java Tue Oct 23 02:28:59 2012
@@ -385,7 +385,7 @@ public class BuiltInGzipDecompressor imp
copyBytesToLocal(n); // modifies userBufLen, etc.
if (localBufOff >= 4) { // should be strictly ==
long inputSize = readUIntLE(localBuf, 0);
- if (inputSize != (inflater.getBytesWritten() & 0xffffffff)) {
+ if (inputSize != (inflater.getBytesWritten() & 0xffffffffL)) {
throw new IOException(
"stored gzip size doesn't match decompressed size");
}
@@ -566,7 +566,7 @@ public class BuiltInGzipDecompressor imp
return ((((long)(b[off+3] & 0xff) << 24) |
((long)(b[off+2] & 0xff) << 16) |
((long)(b[off+1] & 0xff) << 8) |
- ((long)(b[off] & 0xff) )) & 0xffffffff);
+ ((long)(b[off] & 0xff) )) & 0xffffffffL);
}
}
Modified: hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/compress/TestCodec.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/compress/TestCodec.java?rev=1401143&r1=1401142&r2=1401143&view=diff
==============================================================================
--- hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/compress/TestCodec.java (original)
+++ hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/compress/TestCodec.java Tue Oct 23 02:28:59 2012
@@ -811,4 +811,54 @@ public class TestCodec {
}
writer.close();
}
+
+ @Test
+ public void testGzipLongOverflow() throws IOException {
+ LOG.info("testGzipLongOverflow");
+
+ // Don't use native libs for this test.
+ Configuration conf = new Configuration();
+ conf.setBoolean("io.native.lib.available", false);
+ assertFalse("ZlibFactory is using native libs against request",
+ ZlibFactory.isNativeZlibLoaded(conf));
+
+ // Ensure that the CodecPool has a BuiltInZlibInflater in it.
+ Decompressor zlibDecompressor = ZlibFactory.getZlibDecompressor(conf);
+ assertNotNull("zlibDecompressor is null!", zlibDecompressor);
+ assertTrue("ZlibFactory returned unexpected inflator",
+ zlibDecompressor instanceof BuiltInZlibInflater);
+ CodecPool.returnDecompressor(zlibDecompressor);
+
+ // Now create a GZip text file.
+ String tmpDir = System.getProperty("test.build.data", "/tmp/");
+ Path f = new Path(new Path(tmpDir), "testGzipLongOverflow.bin.gz");
+ BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
+ new GZIPOutputStream(new FileOutputStream(f.toString()))));
+
+ final int NBUF = 1024 * 4 + 1;
+ final char[] buf = new char[1024 * 1024];
+ for (int i = 0; i < buf.length; i++) buf[i] = '\0';
+ for (int i = 0; i < NBUF; i++) {
+ bw.write(buf);
+ }
+ bw.close();
+
+ // Now read it back, using the CodecPool to establish the
+ // decompressor to use.
+ CompressionCodecFactory ccf = new CompressionCodecFactory(conf);
+ CompressionCodec codec = ccf.getCodec(f);
+ Decompressor decompressor = CodecPool.getDecompressor(codec);
+ FileSystem fs = FileSystem.getLocal(conf);
+ InputStream is = fs.open(f);
+ is = codec.createInputStream(is, decompressor);
+ BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ for (int j = 0; j < NBUF; j++) {
+ int n = br.read(buf);
+ assertEquals("got wrong read length!", n, buf.length);
+ for (int i = 0; i < buf.length; i++)
+ assertEquals("got wrong byte!", buf[i], '\0');
+ }
+ br.close();
+ }
+
}
Modified: hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/file/tfile/TestVLong.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/file/tfile/TestVLong.java?rev=1401143&r1=1401142&r2=1401143&view=diff
==============================================================================
--- hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/file/tfile/TestVLong.java (original)
+++ hadoop/common/branches/branch-1/src/test/org/apache/hadoop/io/file/tfile/TestVLong.java Tue Oct 23 02:28:59 2012
@@ -141,7 +141,7 @@ public class TestVLong extends TestCase
int shift = rng.nextInt(Long.SIZE) + 1;
long mask = (1L << shift) - 1;
long a = rng.nextInt() << 32;
- long b = ((long) rng.nextInt()) & 0xffffffff;
+ long b = ((long) rng.nextInt()) & 0xffffffffL;
data[i] = (a + b) & mask;
}