[ https://issues.apache.org/jira/browse/COMPRESS-244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13833613#comment-13833613 ]
Nico Kruber commented on COMPRESS-244: -------------------------------------- looks good - having the firstByte as long in the first place is, of course, also ok maybe add a comment on why the value which is obviously containing only a single byte needs to be "long" so that it is not changed back by mistake in the future? > 7z reading of UINT64 data type is wrong for big values > ------------------------------------------------------ > > Key: COMPRESS-244 > URL: https://issues.apache.org/jira/browse/COMPRESS-244 > Project: Commons Compress > Issue Type: Bug > Components: Archivers > Affects Versions: 1.6 > Reporter: Nico Kruber > Labels: easyfix, patch > Fix For: 1.7 > > Attachments: fix-readUint64-for-large-values.diff > > > h2. Brief description > large values with a first byte indicating at least 4 additional bytes shift > an integer by at least 32bits thus leading to an overflow and an incorrect > value - the value needs to be casted to long before the bitshift! > (see the attached patch) > h2. Details from the 7z documentation > {quote} > {noformat} > UINT64 means real UINT64 encoded with the following scheme: > Size of encoding sequence depends from first byte: > First_Byte Extra_Bytes Value > (binary) > 0xxxxxxx : ( xxxxxxx ) > 10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y > 110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y > ... > 1111110x BYTE y[6] : ( x << (8 * 6)) + y > 11111110 BYTE y[7] : y > 11111111 BYTE y[8] : y > {noformat} > {quote} -- This message was sent by Atlassian JIRA (v6.1#6144)