You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2012/03/02 20:59:51 UTC
svn commit: r1296420 - in /commons/proper/compress/trunk/src: changes/
main/java/org/apache/commons/compress/archivers/tar/
test/java/org/apache/commons/compress/archivers/tar/ test/resources/
Author: bodewig
Date: Fri Mar 2 19:59:50 2012
New Revision: 1296420
URL: http://svn.apache.org/viewvc?rev=1296420&view=rev
Log:
workaround for tar implementations that insert a NUL byte into header fields. COMPRESS-181
Added:
commons/proper/compress/trunk/src/test/resources/simple-aix-native-tar.tar (with props)
Modified:
commons/proper/compress/trunk/src/changes/changes.xml
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java
Modified: commons/proper/compress/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/changes/changes.xml?rev=1296420&r1=1296419&r2=1296420&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/changes/changes.xml (original)
+++ commons/proper/compress/trunk/src/changes/changes.xml Fri Mar 2 19:59:50 2012
@@ -46,6 +46,10 @@ The <action> type attribute can be add,u
<body>
<release version="1.4" date="unreleased"
description="Release 1.4">
+ <action issue="COMPRESS-181" type="update" date="2012-03-02">
+ Added a workaround for a Bug some tar implementations that add
+ a NUL byte as first byte in numeric header fields.
+ </action>
<action issue="COMPRESS-176" type="update" date="2012-02-28">
Added a workaround for a Bug in WinZIP which uses backslashes
as path separators in Unicode Extra Fields.
Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java?rev=1296420&r1=1296419&r2=1296420&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarUtils.java Fri Mar 2 19:59:50 2012
@@ -34,13 +34,18 @@ public class TarUtils {
/**
* Parse an octal string from a buffer.
- * Leading spaces are ignored.
+ *
+ * <p>Leading spaces are ignored.
* The buffer must contain a trailing space or NUL,
- * and may contain an additional trailing space or NUL.
+ * and may contain an additional trailing space or NUL.</p>
*
- * The input buffer is allowed to contain all NULs,
+ * <p>The input buffer is allowed to contain all NULs,
* in which case the method returns 0L
- * (this allows for missing fields).
+ * (this allows for missing fields).</p>
+ *
+ * <p>To work-around some tar implementations that insert a
+ * leading NUL this method returns 0 if it detects a leading NUL
+ * since Commons Compress 1.4.</p>
*
* @param buffer The buffer from which to parse.
* @param offset The offset into the buffer from which to parse.
@@ -57,14 +62,7 @@ public class TarUtils {
throw new IllegalArgumentException("Length "+length+" must be at least 2");
}
- boolean allNUL = true;
- for (int i = start; i < end; i++){
- if (buffer[i] != 0){
- allNUL = false;
- break;
- }
- }
- if (allNUL) {
+ if (buffer[start] == 0) {
return 0L;
}
Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java?rev=1296420&r1=1296419&r2=1296420&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java (original)
+++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java Fri Mar 2 19:59:50 2012
@@ -18,10 +18,16 @@
package org.apache.commons.compress.archivers.tar;
+import java.io.File;
+import java.io.FileInputStream;
import java.io.StringReader;
+import java.net.URI;
+import java.net.URL;
+import java.util.Date;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
public class TarArchiveInputStreamTest {
@@ -40,4 +46,23 @@ public class TarArchiveInputStreamTest {
assertEquals(1, headers.size());
assertEquals("line1\nline2\nand3", headers.get("comment"));
}
+
+ @Test
+ public void workaroundForBrokenTimeHeader() throws Exception {
+ URL tar = getClass().getResource("/simple-aix-native-tar.tar");
+ TarArchiveInputStream in = null;
+ try {
+ in = new TarArchiveInputStream(new FileInputStream(new File(new URI(tar.toString()))));
+ TarArchiveEntry tae = in.getNextTarEntry();
+ tae = in.getNextTarEntry();
+ assertEquals("sample/link-to-txt-file.lnk", tae.getName());
+ assertEquals(new Date(0), tae.getLastModifiedDate());
+ assertTrue(tae.isSymbolicLink());
+ } finally {
+ if (in != null) {
+ in.close();
+ }
+ }
+ }
+
}
\ No newline at end of file
Modified: commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java?rev=1296420&r1=1296419&r2=1296420&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java (original)
+++ commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/archivers/tar/TarUtilsTest.java Fri Mar 2 19:59:50 2012
@@ -72,12 +72,6 @@ public class TarUtilsTest extends TestCa
fail("Expected IllegalArgumentException - should be at least 2 bytes long");
} catch (IllegalArgumentException expected) {
}
- buffer=new byte[]{0,0,' '}; // not all NULs
- try {
- TarUtils.parseOctal(buffer,0, buffer.length);
- fail("Expected IllegalArgumentException - not all NULs");
- } catch (IllegalArgumentException expected) {
- }
buffer=new byte[]{' ',0,0,0}; // not all NULs
try {
TarUtils.parseOctal(buffer,0, buffer.length);
Added: commons/proper/compress/trunk/src/test/resources/simple-aix-native-tar.tar
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/resources/simple-aix-native-tar.tar?rev=1296420&view=auto
==============================================================================
Binary file - no diff available.
Propchange: commons/proper/compress/trunk/src/test/resources/simple-aix-native-tar.tar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream