Raise a ValueError explicitly
This commit is contained in:
parent
88b7ec2c48
commit
61dce89fbd
@ -40,7 +40,10 @@ def _get_parsers() -> List[T]:
|
||||
|
||||
|
||||
def get_parser(filename: str) -> Tuple[Optional[T], Optional[str]]:
|
||||
""" Return the appropriate parser for a given filename. """
|
||||
""" Return the appropriate parser for a given filename.
|
||||
|
||||
:raises ValueError: Raised if the instantiation of the parser went wrong.
|
||||
"""
|
||||
mtype, _ = mimetypes.guess_type(filename)
|
||||
|
||||
_, extension = os.path.splitext(filename)
|
||||
@ -53,10 +56,6 @@ def get_parser(filename: str) -> Tuple[Optional[T], Optional[str]]:
|
||||
|
||||
for parser_class in _get_parsers(): # type: ignore
|
||||
if mtype in parser_class.mimetypes:
|
||||
try:
|
||||
return parser_class(filename), mtype
|
||||
except ValueError as e:
|
||||
logging.info("Got an exception when trying to instantiate "
|
||||
"%s for %s: %s", parser_class, filename, e)
|
||||
return None, mtype
|
||||
# This instantiation might raise a ValueError on malformed files
|
||||
return parser_class(filename), mtype
|
||||
return None, mtype
|
||||
|
12
mat2
12
mat2
@ -85,7 +85,11 @@ def show_meta(filename: str, sandbox: bool):
|
||||
if not __check_file(filename):
|
||||
return
|
||||
|
||||
p, mtype = parser_factory.get_parser(filename) # type: ignore
|
||||
try:
|
||||
p, mtype = parser_factory.get_parser(filename) # type: ignore
|
||||
except ValueError as e:
|
||||
print("[-] something went wrong when processing %s: %s" % (filename, e))
|
||||
return
|
||||
if p is None:
|
||||
print("[-] %s's format (%s) is not supported" % (filename, mtype))
|
||||
return
|
||||
@ -126,7 +130,11 @@ def clean_meta(filename: str, is_lightweight: bool, inplace: bool, sandbox: bool
|
||||
if not __check_file(filename, mode):
|
||||
return False
|
||||
|
||||
p, mtype = parser_factory.get_parser(filename) # type: ignore
|
||||
try:
|
||||
p, mtype = parser_factory.get_parser(filename) # type: ignore
|
||||
except ValueError as e:
|
||||
print("[-] something went wrong when cleaning %s: %s" % (filename, e))
|
||||
return False
|
||||
if p is None:
|
||||
print("[-] %s's format (%s) is not supported" % (filename, mtype))
|
||||
return False
|
||||
|
@ -65,8 +65,10 @@ class TestCorruptedEmbedded(unittest.TestCase):
|
||||
def test_docx(self):
|
||||
shutil.copy('./tests/data/embedded_corrupted.docx', './tests/data/clean.docx')
|
||||
parser, _ = parser_factory.get_parser('./tests/data/clean.docx')
|
||||
self.assertFalse(parser.remove_all())
|
||||
self.assertIsNotNone(parser.get_meta())
|
||||
with self.assertRaises(ValueError):
|
||||
parser.remove_all()
|
||||
with self.assertRaises(ValueError):
|
||||
self.assertIsNotNone(parser.get_meta())
|
||||
os.remove('./tests/data/clean.docx')
|
||||
|
||||
def test_odt(self):
|
||||
@ -120,8 +122,8 @@ class TestCorruptedFiles(unittest.TestCase):
|
||||
|
||||
def test_png2(self):
|
||||
shutil.copy('./tests/test_libmat2.py', './tests/clean.png')
|
||||
parser, _ = parser_factory.get_parser('./tests/clean.png')
|
||||
self.assertIsNone(parser)
|
||||
with self.assertRaises(ValueError):
|
||||
parser_factory.get_parser('./tests/clean.png')
|
||||
os.remove('./tests/clean.png')
|
||||
|
||||
def test_torrent(self):
|
||||
@ -237,10 +239,10 @@ class TestCorruptedFiles(unittest.TestCase):
|
||||
zout.write('./tests/data/embedded_corrupted.docx')
|
||||
p, mimetype = parser_factory.get_parser('./tests/data/clean.zip')
|
||||
self.assertEqual(mimetype, 'application/zip')
|
||||
meta = p.get_meta()
|
||||
self.assertEqual(meta['tests/data/dirty.flac']['comments'], 'Thank you for using MAT !')
|
||||
self.assertEqual(meta['tests/data/dirty.docx']['word/media/image1.png']['Comment'], 'This is a comment, be careful!')
|
||||
self.assertFalse(p.remove_all())
|
||||
with self.assertRaises(ValueError):
|
||||
p.get_meta()
|
||||
with self.assertRaises(ValueError):
|
||||
self.assertFalse(p.remove_all())
|
||||
os.remove('./tests/data/clean.zip')
|
||||
|
||||
def test_html(self):
|
||||
@ -315,10 +317,10 @@ class TestCorruptedFiles(unittest.TestCase):
|
||||
zout.addfile(tarinfo, f)
|
||||
p, mimetype = parser_factory.get_parser('./tests/data/clean.tar')
|
||||
self.assertEqual(mimetype, 'application/x-tar')
|
||||
meta = p.get_meta()
|
||||
self.assertEqual(meta['./tests/data/dirty.flac']['comments'], 'Thank you for using MAT !')
|
||||
self.assertEqual(meta['./tests/data/dirty.docx']['word/media/image1.png']['Comment'], 'This is a comment, be careful!')
|
||||
self.assertFalse(p.remove_all())
|
||||
with self.assertRaises(ValueError):
|
||||
p.get_meta()
|
||||
with self.assertRaises(ValueError):
|
||||
self.assertFalse(p.remove_all())
|
||||
os.remove('./tests/data/clean.tar')
|
||||
|
||||
shutil.copy('./tests/data/dirty.png', './tests/data/clean.tar')
|
||||
|
Loading…
Reference in New Issue
Block a user