diff options
Diffstat (limited to 'mitmproxy/contentviews/image/image_parser.py')
| -rw-r--r-- | mitmproxy/contentviews/image/image_parser.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/mitmproxy/contentviews/image/image_parser.py b/mitmproxy/contentviews/image/image_parser.py index 7c74669a..46549b1b 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,24 @@ 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), "Size: {} x {}\n " + "Bits per pixel: {}\n " + "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 |
