COMPRESS-314 read group/user ids > 0x80000000 from (posix) tars
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/compress/trunk@1678430 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 1881fd5..372a7cb 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -54,7 +54,11 @@
This also changes the superclass of ZCompressorInputStream.
">
- <action issue="COMPRESS-315" type="add" date="2015-05-06">
+ <action issue="COMPRESS-314" type="fix" date="2015-05-08">
+ TarArchiveInputStream can now read entries with group or
+ user ids > 0x80000000.
+ </action>
+ <action issue="COMPRESS-315" type="fix" date="2015-05-06">
TarArchiveOutputStream can now write entries with group or
user ids > 0x80000000.
</action>
diff --git a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
index c557007..41acf2a 100644
--- a/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.java
@@ -498,11 +498,11 @@
} else if ("linkpath".equals(key)){
currEntry.setLinkName(val);
} else if ("gid".equals(key)){
- currEntry.setGroupId(Integer.parseInt(val));
+ currEntry.setGroupId(Long.parseLong(val));
} else if ("gname".equals(key)){
currEntry.setGroupName(val);
} else if ("uid".equals(key)){
- currEntry.setUserId(Integer.parseInt(val));
+ currEntry.setUserId(Long.parseLong(val));
} else if ("uname".equals(key)){
currEntry.setUserName(val);
} else if ("size".equals(key)){
diff --git a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
index f4fca53..ca53b8b 100644
--- a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
@@ -235,6 +235,27 @@
}
}
+ @Test
+ public void shouldReadBigGid() throws Exception {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ TarArchiveOutputStream tos = new TarArchiveOutputStream(bos);
+ tos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_POSIX);
+ TarArchiveEntry t = new TarArchiveEntry("name");
+ t.setGroupId(4294967294l);
+ t.setSize(1);
+ tos.putArchiveEntry(t);
+ tos.write(30);
+ tos.closeArchiveEntry();
+ tos.close();
+ byte[] data = bos.toByteArray();
+ ByteArrayInputStream bis = new ByteArrayInputStream(data);
+ TarArchiveInputStream tis =
+ new TarArchiveInputStream(bis);
+ t = tis.getNextTarEntry();
+ assertEquals(4294967294l, t.getLongGroupId());
+ tis.close();
+ }
+
private TarArchiveInputStream getTestStream(String name) {
return new TarArchiveInputStream(
TarArchiveInputStreamTest.class.getResourceAsStream(name));