commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefan Bodewig (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (COMPRESS-314) TarArchiveInputStream rejects uid or gid >= 0x80000000
Date Wed, 06 May 2015 04:35:00 GMT

     [ https://issues.apache.org/jira/browse/COMPRESS-314?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Stefan Bodewig updated COMPRESS-314:
------------------------------------
    Affects Version/s:     (was: 1.10)
                       1.9
        Fix Version/s: 1.10

> TarArchiveInputStream rejects uid or gid >= 0x80000000
> ------------------------------------------------------
>
>                 Key: COMPRESS-314
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-314
>             Project: Commons Compress
>          Issue Type: Bug
>          Components: Archivers
>    Affects Versions: 1.9
>            Reporter: Jonathan Nieder
>            Priority: Minor
>             Fix For: 1.10
>
>
> A POSIX-format archive that came from sysdiagnose produces NumberFormatException[1] when
I try to read it with TarArchiveInputStream.
> The relevant part of the .tar file looks like this:
>    18 uid=429496729
> That's the uid of 'nobody' on Mac OS (on Mac OS, uid_t is 'unsigned int').
> POSIX doesn't say anything about the width of the uid extended header[2], so I assume
the tar file is okay. GNU tar doesn't have trouble with it.
> The relevant code, in applyPaxHeadersToCurrentEntry:
>             } else if ("gid".equals(key)){
>                 currEntry.setGroupId(Integer.parseInt(val));
> ...
>             } else if ("uid".equals(key)){
>                 currEntry.setUserId(Integer.parseInt(val));
> uid_t and gid_t are typically unsigned 32-bit integers, so these should presumably use
Long.parseLong to handle integers with the top bit set (and TarArchiveEntry would need some
modifications to handle large uid and gid, too).
> [1] java.lang.NumberFormatException: For input string: "4294967294"
>         at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
>         at java.lang.Integer.parseInt(Integer.java:495)
>         at java.lang.Integer.parseInt(Integer.java:527)
>         at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.applyPaxHeadersToCurrentEntry(TarArchiveInputStream.java:488)
>         at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.paxHeaders(TarArchiveInputStream.java:415)
>         at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:295)
> [2] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_03
> uid
> The user ID of the file owner, expressed as a decimal number using digits from the ISO/IEC
646:1991 standard. This record shall override the uid field in the following header block(s).
When used in write or copy mode, pax shall include a uid extended header record for each file
whose owner ID is greater than 2097151 (octal 7777777).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message