Skip to content

Commit 27dc4b9

Browse files
authored
Numpy Header Stream Offset (#164)
1 parent a5ca786 commit 27dc4b9

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

modelscan/model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ def __exit__(self, exc_type, exc_value, traceback) -> None: # type: ignore
4747
def get_source(self) -> Path:
4848
return self._source
4949

50-
def get_stream(self) -> IO[bytes]:
50+
def get_stream(self, offset: int = 0) -> IO[bytes]:
5151
if not self._stream:
5252
raise ModelDataEmpty("Model data is empty.")
5353

54-
self._stream.seek(0)
54+
self._stream.seek(offset)
5555
return self._stream

modelscan/tools/picklescanner.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,12 @@ def scan_pickle_bytes(
124124
settings: Dict[str, Any],
125125
scan_name: str = "pickle",
126126
multiple_pickles: bool = True,
127+
offset: int = 0,
127128
) -> ScanResults:
128129
"""Disassemble a Pickle stream and report issues"""
129130
issues: List[Issue] = []
130131
try:
131-
raw_globals = _list_globals(model.get_stream(), multiple_pickles)
132+
raw_globals = _list_globals(model.get_stream(offset), multiple_pickles)
132133
except GenOpsError as e:
133134
if e.globals is not None:
134135
return _build_scan_result_from_raw_globals(
@@ -231,7 +232,7 @@ def scan_numpy(model: Model, settings: Dict[str, Any]) -> ScanResults:
231232
_, _, dtype = np.lib.format._read_array_header(stream, version) # type: ignore[attr-defined]
232233

233234
if dtype.hasobject:
234-
return scan_pickle_bytes(model, settings, scan_name)
235+
return scan_pickle_bytes(model, settings, scan_name, True, stream.tell())
235236
else:
236237
return ScanResults([], [], [])
237238
else:

0 commit comments

Comments
 (0)