From 68de323d3fff3d2eaf39ff81aa09cb73cad0a443 Mon Sep 17 00:00:00 2001 From: Rob McMullen Date: Wed, 1 Jun 2016 15:37:28 -0700 Subject: [PATCH] Added better error checking for atari DOS executables --- atrcopy/ataridos.py | 7 +++++-- atrcopy/errors.py | 3 +++ atrcopy/utils.py | 2 ++ test/conftest.py | 4 ++++ test/mock.py | 30 ++++++++++++++++++++++++++++++ test/test_ataridos.py | 37 +++++++++++++++++++++++++++++++++++++ 6 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 test/conftest.py create mode 100644 test/mock.py create mode 100644 test/test_ataridos.py diff --git a/atrcopy/ataridos.py b/atrcopy/ataridos.py index 6d3cb51..6395b9e 100644 --- a/atrcopy/ataridos.py +++ b/atrcopy/ataridos.py @@ -166,18 +166,21 @@ class AtariDosFile(object): else: self.segments.append(ObjSegment(r[pos:pos + 1], pos, pos + 1, 0, 1, "Incomplete Data")) break - log.debug("header parsing: header=0x%x" % header) if header == 0xffff: # Apparently 0xffff header can appear in any segment, not just # the first. Regardless, it is ignored everywhere. pos += 2 + first = False + continue elif first: raise InvalidBinaryFile - first = False + log.debug("header parsing: header=0x%x" % header) if len(b[pos:pos + 4]) < 4: self.segments.append(ObjSegment(r[pos:pos + 4], 0, 0, 0, len(b[pos:pos + 4]), "Short Segment Header")) break start, end = b[pos:pos + 4].view(dtype='