Skip to content

Commit

Permalink
Handle graphics images and VHD disk images
Browse files Browse the repository at this point in the history
  • Loading branch information
jasperla committed Jan 26, 2023
1 parent bce9a34 commit dec0572
Show file tree
Hide file tree
Showing 6 changed files with 1,252 additions and 0 deletions.
21 changes: 21 additions & 0 deletions karton/classifier/classifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,27 @@ def zip_has_mac_app() -> bool:
)
return sample_class

# Various graphics/image file formats
image_assoc = {
"gif": ["GIF image data"],
"jpg": ["JPEG image data"],
"png": ["PNG image data"],
}

for ext, patterns in image_assoc.items():
if any(pattern in magic for pattern in patterns):
sample_class.update({"kind": "dump", "extension": ext})
return sample_class

if extension in image_assoc.keys():
sample_class.update({"kind": "dump", "extension": ext})
return sample_class

# Is Disk image?
if magic.startswith("Microsoft Disk Image") or extension == "vhd":
sample_class.update({"kind": "dump", "extension": "vhd"})
return sample_class

# Windows scripts (per extension)
script_extensions = [
"vbs",
Expand Down
100 changes: 100 additions & 0 deletions tests/test_classifier_dump.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import pytest
from karton.core import Task
from karton.core.test import KartonTestCase

from .mock_helper import mock_resource, mock_task


@pytest.mark.usefixtures("karton_classifier")
class TestClassifier(KartonTestCase):
def test_process_dump_vhd(self):
resource = mock_resource("dump.vhd")
magic = self.magic_from_content(resource.content, mime=False)
res = self.run_task(mock_task(resource))

expected = Task(
headers={
"type": "sample",
"stage": "recognized",
"origin": "karton.classifier",
"quality": "high",
"kind": "dump",
"extension": "vhd",
"mime": "application/x-virtualbox-vhd",
},
payload={
"sample": resource,
"tags": ["dump:vhd"],
"magic": magic,
},
)
self.assertTasksEqual(res, [expected])

def test_process_dump_gif(self):
resource = mock_resource("dump.gif")
magic = self.magic_from_content(resource.content, mime=False)
res = self.run_task(mock_task(resource))

expected = Task(
headers={
"type": "sample",
"stage": "recognized",
"origin": "karton.classifier",
"quality": "high",
"kind": "dump",
"extension": "gif",
"mime": "image/gif",
},
payload={
"sample": resource,
"tags": ["dump:gif"],
"magic": magic,
},
)
self.assertTasksEqual(res, [expected])

def test_process_dump_jpg(self):
resource = mock_resource("dump.jpg")
magic = self.magic_from_content(resource.content, mime=False)
res = self.run_task(mock_task(resource))

expected = Task(
headers={
"type": "sample",
"stage": "recognized",
"origin": "karton.classifier",
"quality": "high",
"kind": "dump",
"extension": "jpg",
"mime": "image/jpeg",
},
payload={
"sample": resource,
"tags": ["dump:jpg"],
"magic": magic,
},
)
self.assertTasksEqual(res, [expected])

def test_process_dump_png(self):
resource = mock_resource("dump.png")
magic = self.magic_from_content(resource.content, mime=False)
res = self.run_task(mock_task(resource))

expected = Task(
headers={
"type": "sample",
"stage": "recognized",
"origin": "karton.classifier",
"quality": "high",
"kind": "dump",
"extension": "png",
"mime": "image/png",
},
payload={
"sample": resource,
"tags": ["dump:png"],
"magic": magic,
},
)
self.assertTasksEqual(res, [expected])
Loading

0 comments on commit dec0572

Please sign in to comment.