Skip to content

Commit 5d30dd4

Browse files
committed
Process initial comments
1 parent c5b3451 commit 5d30dd4

File tree

1 file changed

+13
-11
lines changed
  • dissect/hypervisor/backup

1 file changed

+13
-11
lines changed

dissect/hypervisor/backup/vbk.py

+13-11
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,16 @@ def __init__(self, vbk: VBK, offset: int):
157157
self.header = c_vbk.SnapshotSlotHeader(vbk.fh)
158158
self.descriptor = None
159159
self.grain = None
160+
self.valid_max_banks = 0
160161
self.banks = []
161162

162163
if self.header.ContainsSnapshot:
163164
self.descriptor = c_vbk.SnapshotDescriptor(vbk.fh)
164165
self.grain = c_vbk.BanksGrain(vbk.fh)
165166

166-
valid_max_banks = 0xF8 if self.vbk.header.SnapshotSlotFormat == 0 else 0x7F00
167+
self.valid_max_banks = 0xF8 if self.vbk.header.SnapshotSlotFormat == 0 else 0x7F00
167168

168-
if self.grain.MaxBanks > valid_max_banks:
169+
if self.grain.MaxBanks > self.valid_max_banks:
169170
raise VBKError("Invalid SnapshotSlot: MaxBanks is not valid")
170171
if self.grain.StoredBanks > self.grain.MaxBanks:
171172
raise VBKError("Invalid SnapshotSlot: StoredBanks is greater than MaxBanks")
@@ -185,11 +186,11 @@ def size(self) -> int:
185186
if self.header.ContainsSnapshot:
186187
slot_size += self.grain.MaxBanks * len(c_vbk.BankDescriptor)
187188
else:
188-
slot_size += (0xF8 if self.vbk.header.SnapshotSlotFormat == 0 else 0x7F00) * len(c_vbk.BankDescriptor)
189+
slot_size += self.valid_max_banks * len(c_vbk.BankDescriptor)
189190

190-
if slot_size & 0xFFF:
191+
if slot_size & (PAGE_SIZE - 1):
191192
# Round to next page boundary
192-
slot_size = (slot_size & ~0xFFF) + PAGE_SIZE
193+
slot_size = (slot_size & ~(PAGE_SIZE - 1)) + PAGE_SIZE
193194

194195
return slot_size
195196

@@ -279,7 +280,7 @@ def verify(self, crc: int) -> bool:
279280
self.vbk.fh.seek(self.offset)
280281
return crc(self.vbk.fh.read(self.size)) == crc
281282

282-
def page(self, page: int) -> bytes:
283+
def page(self, page: int) -> memoryview:
283284
"""Read a page from the bank.
284285
285286
Args:
@@ -840,7 +841,7 @@ def data(self, idx: int) -> bytes:
840841
page = self._pages[page_id]
841842
offset = (offset * self._entry_size) + 8
842843

843-
buf = self.vbk.active_slot.page(page)
844+
buf = self.vbk.page(page)
844845
entry = buf[offset : offset + self._entry_size]
845846
return entry
846847

@@ -929,7 +930,7 @@ def data(self, idx: int) -> bytes:
929930
offset *= self._entry_size
930931

931932
page_no = self._lookup_page(page_idx)
932-
return self.vbk.active_slot.page(page_no)[offset : offset + self._entry_size]
933+
return self.vbk.page(page_no)[offset : offset + self._entry_size]
933934

934935

935936
class FibMetaSparseTable:
@@ -952,6 +953,7 @@ def __init__(self, vbk: VBK, page: int, count: int):
952953
self.page = page
953954
self.count = count
954955

956+
# Newer versions use a different block descriptor
955957
self.type = FibBlockDescriptorV7 if self.vbk.is_v7() else FibBlockDescriptor
956958
self._fake_sparse = self.type(
957959
self.vbk,
@@ -966,7 +968,7 @@ def __init__(self, vbk: VBK, page: int, count: int):
966968

967969
self._open_table = lru_cache(128)(self._open_table)
968970

969-
def _open_table(self, page: int, count: int) -> MetaVector2[FibBlockDescriptor | FibBlockDescriptorV7]:
971+
def _open_table(self, page: int, count: int) -> MetaVector[FibBlockDescriptor | FibBlockDescriptorV7]:
970972
return MetaVector(self.vbk, self.type, page, count)
971973

972974
def get(self, idx: int) -> FibBlockDescriptor | FibBlockDescriptorV7:
@@ -1002,7 +1004,7 @@ def __init__(self, vbk: VBK, page: int, count: int, size: int):
10021004
self.page = page
10031005
self.count = count
10041006

1005-
self.mt = FibMetaSparseTable(vbk, page, count)
1007+
self.table = FibMetaSparseTable(vbk, page, count)
10061008

10071009
super().__init__(size, align=vbk.block_size)
10081010

@@ -1017,7 +1019,7 @@ def _read(self, offset: int, length: int) -> bytes:
10171019

10181020
read_size = min(length, block_size - offset_in_block)
10191021

1020-
block_desc = self.mt.get(block_idx)
1022+
block_desc = self.table.get(block_idx)
10211023

10221024
if block_desc.is_normal():
10231025
block = self.vbk.block_store.get(block_desc.block_id)

0 commit comments

Comments
 (0)