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 &gt; 0x80000000.
+      </action>
+      <action issue="COMPRESS-315" type="fix" date="2015-05-06">
         TarArchiveOutputStream can now write entries with group or
         user ids &gt; 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));