aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/contentviews/image/image_parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/contentviews/image/image_parser.py')
-rw-r--r--mitmproxy/contentviews/image/image_parser.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/mitmproxy/contentviews/image/image_parser.py b/mitmproxy/contentviews/image/image_parser.py
index 7c74669a..fcc50cb5 100644
--- a/mitmproxy/contentviews/image/image_parser.py
+++ b/mitmproxy/contentviews/image/image_parser.py
@@ -6,6 +6,7 @@ from kaitaistruct import KaitaiStream
from mitmproxy.contrib.kaitaistruct import png
from mitmproxy.contrib.kaitaistruct import gif
from mitmproxy.contrib.kaitaistruct import jpeg
+from mitmproxy.contrib.kaitaistruct import ico
Metadata = typing.List[typing.Tuple[str, str]]
@@ -78,3 +79,25 @@ def parse_jpeg(data: bytes) -> Metadata:
if field.data is not None:
parts.append((field.tag._name_, field.data.decode('UTF-8').strip('\x00')))
return parts
+
+
+def parse_ico(data: bytes) -> Metadata:
+ img = ico.Ico(KaitaiStream(io.BytesIO(data)))
+ parts = [
+ ('Format', 'ICO'),
+ ('Number of images', str(img.num_images)),
+ ]
+
+ for i, image in enumerate(img.images):
+ parts.append(
+ (
+ 'Image {}'.format(i + 1), "Size: {} x {}\n"
+ "{: >18}Bits per pixel: {}\n"
+ "{: >18}PNG: {}".format(256 if not image.width else image.width,
+ 256 if not image.height else image.height,
+ '', image.bpp,
+ '', image.is_png)
+ )
+ )
+
+ return parts