Improve InterleaveExtractor output file names

This commit is contained in:
RichardG867
2022-04-14 17:45:54 -03:00
parent 95bd3d3d64
commit df87fe9a89
2 changed files with 18 additions and 15 deletions

View File

@@ -1634,7 +1634,6 @@ class InterleaveExtractor(Extractor):
# Write all deinterleaved permutations, as some sets may
# contain the same interleaved string on more than one part.
alphanumeric = '0123456789abcdefghijklmn'
file_counter = 0
part_count = len(data)
buf = bytearray(part_size * part_count)
@@ -1646,7 +1645,7 @@ class InterleaveExtractor(Extractor):
data_offset += 1
# Write deinterleaved file.
f = open(os.path.join(dest_dir, 'deinterleaved_' + alphanumeric[file_counter] + '.bin'), 'wb')
f = open(os.path.join(dest_dir, 'deinterleaved_' + ''.join(util.base62[data_index] for data_index in permutation) + '.bin'), 'wb')
f.write(buf)
f.close()
file_counter += 1
@@ -1661,7 +1660,7 @@ class InterleaveExtractor(Extractor):
for counterpart_path in counterpart_paths:
# Move original file.
try:
shutil.move(counterpart_path, os.path.join(dest_dir, 'interleaved_' + alphanumeric[file_counter] + '.bin'))
shutil.move(counterpart_path, os.path.join(dest_dir, 'interleaved_' + util.base62[file_counter] + '.bin'))
except:
pass
file_counter += 1
@@ -1751,6 +1750,7 @@ class OMFExtractor(Extractor):
while data:
data = in_f.read(1048576)
out_f.write(data)
out_f.close()
except:
in_f.close()
@@ -2215,7 +2215,7 @@ class VMExtractor(ArchiveExtractor):
floppy_media = 'floppy.144'
# Copy original file and blank floppy image to the destination directory.
exe_name = util.random_name(8, alnum_only=True).lower() + '.exe'
exe_name = util.random_name(8, charset=util.random_name_nosymbols).lower() + '.exe'
exe_path = os.path.join(dest_dir, exe_name)
image_path = os.path.join(dest_dir, util.random_name(8) + '.img')
try:
@@ -2301,7 +2301,7 @@ class VMExtractor(ArchiveExtractor):
# Create filename for the individual ETI.
eti_name = temp_files[0] # dummy
while eti_name in temp_files:
eti_name = util.random_name(8, alnum_only=True).lower() + '.eti'
eti_name = util.random_name(8, charset=util.random_name_nosymbols).lower() + '.eti'
temp_files.append(eti_name)
# Sanitize extracted filename to not overwrite ourselves.
@@ -2361,7 +2361,7 @@ class VMExtractor(ArchiveExtractor):
required for Siemens Nixdorf FastPacket with its LZEXE-compressed stub."""
# Copy original file to the destination directory.
exe_name = util.random_name(8, alnum_only=True).lower() + '.exe'
exe_name = util.random_name(8, charset=util.random_name_nosymbols).lower() + '.exe'
exe_path = os.path.join(dest_dir, exe_name)
try:
shutil.copy2(file_path, exe_path)
@@ -2369,7 +2369,7 @@ class VMExtractor(ArchiveExtractor):
return True
# Generate a name for the unpacked file.
unpacked_name = util.random_name(8, alnum_only=True).lower() + '.ulz'
unpacked_name = util.random_name(8, charset=util.random_name_nosymbols).lower() + '.ulz'
unpacked_path = os.path.join(dest_dir, unpacked_name)
# Create batch file for extraction.

View File

@@ -21,6 +21,14 @@ from biostools.pciutil import *
date_pattern_mmddyy = re.compile('''(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/(?P<year>[0-9]{2,4})''')
number_pattern = re.compile('''[0-9]+''')
digits = '0123456789'
lowercase = 'abcdefghijklmnopqrstuvwxyz'
uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
fn_symbols = '$%\'-_@~`!(){}^#&.+,;=[]'
base62 = digits + lowercase + uppercase
random_name_symbols = lowercase + digits + fn_symbols + uppercase
random_name_nosymbols = lowercase + digits + uppercase
_error_log_lock = multiprocessing.Lock()
@@ -158,14 +166,9 @@ def log_traceback(*args):
traceback.print_exc(file=f)
f.close()
def random_name(chars=16, alnum_only=False):
"""Generate a random filename using valid DOS/Windows characters
(alnum_only=False) or alphanumeric characters (alnum_only=True)."""
if alnum_only:
symbols = ''
else:
symbols = '$%\'-_@~`!(){}^#&.+,;=[]'
return ''.join(random.choice('abcdefghijklmnopqrstuvwxyz0123456789' + symbols + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') for x in range(chars))
def random_name(chars=16, charset=random_name_symbols):
"""Generate a random filename using the given charset."""
return ''.join(random.choice(charset) for x in range(chars))
def read_complement(file_path, file_header=None, max_size=16777216):
"""Read up to max_size from file_path starting at the end of file_header.