INNER CODE UNIT · Python
file_hash
KSwordDEV/KSword · GhidraRuntimePlugin/package.py:25
def file_hash(path: Path) -> str:
digest = hashlib.sha256()
with path.open('rb') as stream:
for block in iter(lambda: stream.read(1024 * 1024), b''):
digest.update(block)
return digest.hexdigest()
def safe_member(name: str, expected_root: str) -> PurePosixPath:
if '\\' in name or '\x00' in name:
raise ValueError('unsafe ZIP separator or NUL')
parts = name.rstrip('/').split('/')
if not parts or parts[0] != expected_root:
raise ValueError('ZIP root does not match pinned upstream root')
for part in parts:
if not part or part in ('.', '..') or part.endswith((' ', '.')):
raise ValueError('unsafe ZIP path component')
if any(character in part for character in ':<>"|?*'):