From f079c5a60a337ee6d880e45c25e1987b94fe2aa1 Mon Sep 17 00:00:00 2001 From: Eric Smith Date: Wed, 11 Apr 2018 23:23:50 -0600 Subject: [PATCH] Validate filenames, and convert them to lower case. --- sosdisk.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sosdisk.py b/sosdisk.py index 84e36bc..6ddbdd3 100644 --- a/sosdisk.py +++ b/sosdisk.py @@ -1,3 +1,4 @@ +import string import struct import sys @@ -43,6 +44,14 @@ interleave_tables = { 'dos': dos_to_phys_sect, 'sos': half_block_to_phys_sect } +sos_valid_fn_chars = set(string.ascii_uppercase + string.digits + '.') + +def bytes_to_sos_filename(b): + s = str(b, 'ascii') + assert all(c in sos_valid_fn_chars for c in s) + return s.lower() + + class SOSDirectoryEntry: def __init__(self, disk): self.disk = disk @@ -78,7 +87,7 @@ class SOSFileEntry(SOSDirectoryEntry): self.storage >>= 4 if self.storage == 0: return - self.name = str(entry_data[1:1+name_length], 'ascii') + self.name = bytes_to_sos_filename(entry_data[1:1+name_length]) if (self.storage == 0xd): self.subdir = SOSDirectory(disk, self.key_pointer)