From cbcf2c49061839c2da6daf25348c5d187c02ea03 Mon Sep 17 00:00:00 2001 From: Andre Brait Date: Sat, 5 Mar 2022 18:18:48 +0100 Subject: [PATCH 1/2] Add more details on how to parse the remainders Also add me as contributor ;) --- docs/unrar.html | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/docs/unrar.html b/docs/unrar.html index c5ee39d..4c422e3 100755 --- a/docs/unrar.html +++ b/docs/unrar.html @@ -190,6 +190,10 @@ Packed Data (Total Packed Size) bytes

Follow the following pseudo-code to read in the ExtTime Structure.

@@ -202,31 +206,43 @@ var extTimeFlags = readBits(16) mtime_rmode = extTimeFlags >> 12 if ((mtime_rmode & 8)==0) goto ctime mtime_count = mtime_rmode & 0x3 -mtime_remainder = readBits(8*mtime_count); +mtime_remainder = 0 +for (var i = 0; i < mtime_count; i++) { + mtime_remainder = (readBits(8) << 16) | (mtime_remainder >> 8) +} if ((mtime_rmode & 4)!=0) mtime_remainder += one_second ctime: ctime_rmode = extTimeFlags >> 8 if ((ctime_rmode & 8)==0) goto atime -Set ctime to readBits(32) +ctime = readBits(32) ctime_count = ctime_rmode & 0x3 -ctime_remainder = readBits(8*ctime_count) +ctime_remainder = 0 +for (var i = 0; i < ctime_count; i++) { + ctime_remainder = (readBits(8) << 16) | (ctime_remainder >> 8) +} if ((ctime_rmode & 4)!=0) ctime_remainder += one_second atime: atime_rmode = extTimeFlags >> 4 if ((atime_rmode & 8)==0) goto arctime -Set atime to readBits(32) +atime = readBits(32) atime_count = atime_rmode & 0x3 -atime_remainder = readBits(8*atime_count) +atime_remainder = 0 +for (var i = 0; i < atime_count; i++) { + atime_remainder = (readBits(8) << 16) | (atime_remainder >> 8) +} if ((atime_rmode & 4)!=0) atime_remainder += one_second arctime: arctime_rmode = extTimeFlags if ((arctime_rmode & 8)==0) goto done_exttime -Set arctime to readBits(32) +arctime = readBits(32) arctime_count = arctime_rmode & 0x3 -arctime_remainder = readBits(8*arctime_count) +arctime_remainder = 0 +for (var i = 0; i < arctime_count; i++) { + arctime_remainder = (readBits(8) << 16) | (arctime_remainder >> 8) +} if ((arctime_rmode & 4)!=0) arctime_remainder += one_second done_exttime @@ -575,6 +591,7 @@ ZeroCount 4 bits (only present if BitLength is 15) From 81194d04a2885d0fbe2c86334e07bc7eadb50aac Mon Sep 17 00:00:00 2001 From: Andre Brait Date: Sat, 5 Mar 2022 18:25:03 +0100 Subject: [PATCH 2/2] Fix remainder byte order --- docs/unrar.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/unrar.html b/docs/unrar.html index 4c422e3..a3cda38 100755 --- a/docs/unrar.html +++ b/docs/unrar.html @@ -191,7 +191,7 @@ Packed Data (Total Packed Size) bytes
  • 4 bytes containing an MS-DOS date/time (except for mtime, which is part of FILE_HEAD)
  • 0 to 3 bytes containing fractions of seconds in 100ns increments