From 88ef8aec9270fc7aef29d7c83d1499f479ca0be1 Mon Sep 17 00:00:00 2001 From: Graham Date: Sun, 17 Apr 2022 12:12:55 +0100 Subject: [PATCH] Fix reading timestamps with sign bit set lo should've been masked rather than hi. I've switched the code to mask both the low and high DWORDs for simplicity. Signed-off-by: Graham --- .../org/openrs2/archive/cache/finder/CacheFinderExtractor.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/archive/src/main/kotlin/org/openrs2/archive/cache/finder/CacheFinderExtractor.kt b/archive/src/main/kotlin/org/openrs2/archive/cache/finder/CacheFinderExtractor.kt index 0c4b17f5..3f65526d 100644 --- a/archive/src/main/kotlin/org/openrs2/archive/cache/finder/CacheFinderExtractor.kt +++ b/archive/src/main/kotlin/org/openrs2/archive/cache/finder/CacheFinderExtractor.kt @@ -22,7 +22,7 @@ public class CacheFinderExtractor( private val input = LittleEndianDataInputStream(pushbackInput) private fun readTimestamp(): FileTime { - val lo = input.readInt().toLong() + val lo = input.readInt().toLong() and 0xFFFFFFFF val hi = input.readInt().toLong() and 0xFFFFFFFF val seconds = (((hi shl 32) or lo) / 10_000_000) - FILETIME_TO_UNIX_EPOCH @@ -102,7 +102,7 @@ public class CacheFinderExtractor( val atime = readTimestamp() val mtime = readTimestamp() - val sizeHi = input.readInt().toLong() + val sizeHi = input.readInt().toLong() and 0xFFFFFFFF val sizeLo = input.readInt().toLong() and 0xFFFFFFFF val size = (sizeHi shl 32) or sizeLo