diff options
Diffstat (limited to 'mitmproxy/contentviews/image/image_parser.py')
-rw-r--r-- | mitmproxy/contentviews/image/image_parser.py | 23 |
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 |