From 10057f11140543be2576e9b71cbb6b120beaaa65 Mon Sep 17 00:00:00 2001 From: Taeyeon Mori Date: Mon, 27 Feb 2023 22:04:26 +0100 Subject: [PATCH] python/vdfparser: Support parsing new appinfo.vdf format --- lib/python/vdfparser.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/python/vdfparser.py b/lib/python/vdfparser.py index e5cdb07..7d5c64c 100644 --- a/lib/python/vdfparser.py +++ b/lib/python/vdfparser.py @@ -334,7 +334,8 @@ class BinaryVdfParser: class AppInfoFile: - S_APP_HEADER = struct.Struct(" 7 else None self.appinfo = appinfo self.offset = offset self._data = None @@ -396,13 +398,17 @@ class AppInfoFile: def _load(self): magic = self._read_exactly(4) - if magic != b"\x27\x44\x56\x07": - raise ValueError("Wrong appinfo.vdf magic") + if magic == b"\x28\x44\x56\x07": + header_struct = self.S_APP_HEADER_V2 + elif magic == b"\x27\x44\x56\x07": + header_struct = self.S_APP_HEADER + else: + raise ValueError("Unknown appinfo.vdf magic") self._universe = self._read_int() self._apps = {} - buffer = bytearray(self.S_APP_HEADER.size) + buffer = bytearray(header_struct.size) while True: read = self.file.readinto(buffer) @@ -410,17 +416,17 @@ class AppInfoFile: if read < 4: raise EOFError() - struct = self.S_APP_HEADER.unpack(buffer) + struct = header_struct.unpack(buffer) appid, size, *_ = struct if appid == 0: return # Done - elif read < self.S_APP_HEADER.size: + elif read < header_struct.size: raise EOFError() self._apps[appid] = self.App(self, self.file.tell(), struct) - self.file.seek(size - (self.S_APP_HEADER.size - 8), io.SEEK_CUR) + self.file.seek(size - (header_struct.size - 8), io.SEEK_CUR) @property def universe(self):