Author: bodewig Date: Sat Jan 5 07:04:13 2013 New Revision: 1429212 URL: http://svn.apache.org/viewvc?rev=1429212&view=rev Log: another fix from commons - tar doesn't use specified encoding when reading GNU long names
Modified: ant/core/trunk/src/main/org/apache/tools/tar/TarInputStream.java (contents, props changed) Modified: ant/core/trunk/src/main/org/apache/tools/tar/TarInputStream.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/tar/TarInputStream.java?rev=1429212&r1=1429211&r2=1429212&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/tar/TarInputStream.java (original) +++ ant/core/trunk/src/main/org/apache/tools/tar/TarInputStream.java Sat Jan 5 07:04:13 2013 @@ -302,11 +302,11 @@ public class TarInputStream extends Filt if (currEntry.isGNULongNameEntry()) { // read in the name - StringBuffer longName = new StringBuffer(); + ByteArrayOutputStream longName = new ByteArrayOutputStream(); byte[] buf = new byte[SMALL_BUFFER_SIZE]; int length = 0; while ((length = read(buf)) >= 0) { - longName.append(new String(buf, 0, length)); // TODO default charset? + longName.write(buf, 0, length); } getNextEntry(); if (currEntry == null) { @@ -314,12 +314,19 @@ public class TarInputStream extends Filt // Malformed tar file - long entry name not followed by entry return null; } - // remove trailing null terminator - if (longName.length() > 0 - && longName.charAt(longName.length() - 1) == 0) { - longName.deleteCharAt(longName.length() - 1); + byte[] longNameData = longName.toByteArray(); + // remove trailing null terminator(s) + length = longNameData.length; + while (length > 0 && longNameData[length - 1] == 0) { + --length; + } + if (length != longNameData.length) { + byte[] l = new byte[length]; + System.arraycopy(longNameData, 0, l, 0, length); + longNameData = l; } - currEntry.setName(longName.toString()); + + currEntry.setName(encoding.decode(longNameData)); } if (currEntry.isPaxHeader()){ // Process Pax headers Propchange: ant/core/trunk/src/main/org/apache/tools/tar/TarInputStream.java ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Sat Jan 5 07:04:13 2013 @@ -0,0 +1 @@ +/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java:1428942