From 2465516d2f077e20bf147fdafa022ba72ee41dce Mon Sep 17 00:00:00 2001
From: Erik Hetzner
Date: Thu, 20 Feb 2014 19:56:58 -0800
Subject: [PATCH 01/53] do not read past end of extra fields when reading extra
field
---
.../archive/format/gzip/GZIPFExtraRecord.java | 7 ++++++-
.../archive/format/gzip/GZIPFExtraRecords.java | 11 ++++++++---
.../format/gzip/GZIPFormatException.java | 7 +++++++
.../format/gzip/GZIPMemberSeriesTest.java | 5 ++++-
.../archive/format/gzip/IAH-urls-wget.warc.gz | Bin 0 -> 43582 bytes
5 files changed, 25 insertions(+), 5 deletions(-)
create mode 100644 src/test/resources/org/archive/format/gzip/IAH-urls-wget.warc.gz
diff --git a/src/main/java/org/archive/format/gzip/GZIPFExtraRecord.java b/src/main/java/org/archive/format/gzip/GZIPFExtraRecord.java
index a4ed6260..0a9a82e0 100644
--- a/src/main/java/org/archive/format/gzip/GZIPFExtraRecord.java
+++ b/src/main/java/org/archive/format/gzip/GZIPFExtraRecord.java
@@ -98,12 +98,17 @@ public void writeTo(OutputStream os) throws IOException {
os.write(value);
}
}
- public int read(InputStream is) throws IOException {
+ public int read(InputStream is, int maxRead) throws IOException {
byte tmpName[] = null;
byte tmpVal[] = null;
int valLen = 0;
tmpName = ByteOp.readNBytes(is, GZIP_FEXTRA_NAME_BYTES);
valLen = ByteOp.readShort(is);
+ if (valLen > (maxRead - BYTES_IN_SHORT - GZIP_FEXTRA_NAME_BYTES)) {
+ /* read in what's left, but throw an exception */
+ tmpVal = ByteOp.readNBytes(is, maxRead - BYTES_IN_SHORT - GZIP_FEXTRA_NAME_BYTES);
+ throw new GZIPFormatException.GZIPExtraFieldShortException(maxRead);
+ }
if(valLen > 0) {
tmpVal = ByteOp.readNBytes(is, valLen);
}
diff --git a/src/main/java/org/archive/format/gzip/GZIPFExtraRecords.java b/src/main/java/org/archive/format/gzip/GZIPFExtraRecords.java
index 7dc0de44..e5920552 100755
--- a/src/main/java/org/archive/format/gzip/GZIPFExtraRecords.java
+++ b/src/main/java/org/archive/format/gzip/GZIPFExtraRecords.java
@@ -53,12 +53,17 @@ public void readRecords(InputStream is)
ArrayList tmpList = new ArrayList();
while(bytesRemaining > 0) {
GZIPFExtraRecord tmpRecord = new GZIPFExtraRecord();
- int bytesRead = tmpRecord.read(is);
- bytesRemaining -= bytesRead;
+ try {
+ int bytesRead = tmpRecord.read(is, bytesRemaining);
+ bytesRemaining -= bytesRead;
+ tmpList.add(tmpRecord);
+ } catch (GZIPFormatException.GZIPExtraFieldShortException ex) {
+ /* not enough bytes for the extra field; move on */
+ bytesRemaining -= ex.bytesRead;
+ }
if(bytesRemaining < 0) {
throw new GZIPFormatException("Invalid FExtra length/records");
}
- tmpList.add(tmpRecord);
}
this.addAll(tmpList);
}
diff --git a/src/main/java/org/archive/format/gzip/GZIPFormatException.java b/src/main/java/org/archive/format/gzip/GZIPFormatException.java
index ca627a88..3916dafa 100644
--- a/src/main/java/org/archive/format/gzip/GZIPFormatException.java
+++ b/src/main/java/org/archive/format/gzip/GZIPFormatException.java
@@ -21,4 +21,11 @@ public GZIPFormatException(Exception e) {
public GZIPFormatException(String message, IOException e) {
super(message,e);
}
+ public static class GZIPExtraFieldShortException extends GZIPFormatException {
+ int bytesRead;
+ public GZIPExtraFieldShortException(int bytesRead) {
+ super("Extra Field short.");
+ this.bytesRead = bytesRead;
+ }
+ }
}
diff --git a/src/test/java/org/archive/format/gzip/GZIPMemberSeriesTest.java b/src/test/java/org/archive/format/gzip/GZIPMemberSeriesTest.java
index 95c7e96f..2eec46ec 100644
--- a/src/test/java/org/archive/format/gzip/GZIPMemberSeriesTest.java
+++ b/src/test/java/org/archive/format/gzip/GZIPMemberSeriesTest.java
@@ -374,6 +374,9 @@ public void testAutoSkip() throws IOException {
assertNull(m);
assertTrue(s.gotEOF());
}
-
+ public void testWgetProblem() throws IndexOutOfBoundsException, FileNotFoundException, IOException {
+ InputStream is = getClass().getResourceAsStream("IAH-urls-wget.warc.gz");
+ new GZIPDecoder().parseHeader(is);
+ }
}
diff --git a/src/test/resources/org/archive/format/gzip/IAH-urls-wget.warc.gz b/src/test/resources/org/archive/format/gzip/IAH-urls-wget.warc.gz
new file mode 100644
index 0000000000000000000000000000000000000000..fa248f8d52a693075d745270d0013059b0afc6ff
GIT binary patch
literal 43582
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