From 90cfe4746ef21f97eaff0ffc217a660a6a218a77 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Sun, 19 Feb 2023 10:41:51 +0100 Subject: [PATCH] jpegparse: Warn only malformed data in APP data. It's only malformed data in APP when its length is less than 6 chars, because it should have at least an id string. Otherwise, if the id string is not handled, no warning is raised, only a debug message noticing it. Part-of: --- .../gst-plugins-bad/gst/jpegformat/gstjpegparse.c | 40 ++++++++++++++-------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst/jpegformat/gstjpegparse.c b/subprojects/gst-plugins-bad/gst/jpegformat/gstjpegparse.c index 8286718..6be24a2 100644 --- a/subprojects/gst-plugins-bad/gst/jpegformat/gstjpegparse.c +++ b/subprojects/gst-plugins-bad/gst/jpegformat/gstjpegparse.c @@ -368,7 +368,7 @@ gst_jpeg_parse_app0 (GstJpegParse * parse, GstJpegSegment * seg) guint16 xd, yd; guint8 unit, xt, yt; - if (seg->size < 14) /* length of interesting data in APP0 */ + if (seg->size < 6) /* less than 6 means no id string */ return FALSE; gst_byte_reader_init (&reader, seg->data + seg->offset, seg->size); @@ -449,7 +449,9 @@ gst_jpeg_parse_app0 (GstJpegParse * parse, GstJpegSegment * seg) return TRUE; } - return FALSE; + GST_DEBUG_OBJECT (parse, "Unhandled app0: %s", id_str); + + return TRUE; } /* *INDENT-OFF* */ @@ -473,6 +475,9 @@ gst_jpeg_parse_app1 (GstJpegParse * parse, GstJpegSegment * seg) const guint8 *data; gint i; + if (seg->size < 6) /* less than 6 means no id string */ + return FALSE; + gst_byte_reader_init (&reader, seg->data + seg->offset, seg->size); gst_byte_reader_skip_unchecked (&reader, 2); @@ -510,12 +515,15 @@ gst_jpeg_parse_app1 (GstJpegParse * parse, GstJpegSegment * seg) gst_tag_list_unref (tags); } else { GST_INFO_OBJECT (parse, "failed to parse %s: %s", id_str, data); + return FALSE; } } return TRUE; } + GST_DEBUG_OBJECT (parse, "Unhandled app1: %s", id_str); + return TRUE; } @@ -526,7 +534,7 @@ gst_jpeg_parse_app14 (GstJpegParse * parse, GstJpegSegment * seg) const gchar *id_str; guint8 transform; - if (seg->size < 12) /* length of interesting data in APP14 */ + if (seg->size < 6) /* less than 6 means no id string */ return FALSE; gst_byte_reader_init (&reader, seg->data + seg->offset, seg->size); @@ -535,8 +543,10 @@ gst_jpeg_parse_app14 (GstJpegParse * parse, GstJpegSegment * seg) if (!gst_byte_reader_get_string_utf8 (&reader, &id_str)) return FALSE; - if (!g_str_has_prefix (id_str, "Adobe")) - return FALSE; + if (!g_str_has_prefix (id_str, "Adobe")) { + GST_DEBUG_OBJECT (parse, "Unhandled app14: %s", id_str); + return TRUE; + } /* skip version and flags */ if (!gst_byte_reader_skip (&reader, 6)) @@ -581,13 +591,13 @@ gst_jpeg_parse_com (GstJpegParse * parse, GstJpegSegment * seg) return FALSE; comment = get_utf8_from_data (data, size); + if (!comment) + return FALSE; - if (comment) { - GST_INFO_OBJECT (parse, "comment found: %s", comment); - gst_tag_list_add (get_tag_list (parse), GST_TAG_MERGE_REPLACE, - GST_TAG_COMMENT, comment, NULL); - g_free (comment); - } + GST_INFO_OBJECT (parse, "comment found: %s", comment); + gst_tag_list_add (get_tag_list (parse), GST_TAG_MERGE_REPLACE, + GST_TAG_COMMENT, comment, NULL); + g_free (comment); return TRUE; } @@ -786,25 +796,25 @@ gst_jpeg_parse_handle_frame (GstBaseParse * bparse, GstBaseParseFrame * frame, case GST_JPEG_MARKER_COM: if (!gst_jpeg_parse_com (parse, &seg)) { GST_ELEMENT_WARNING (parse, STREAM, FORMAT, - ("Failed to parse com segment"), (NULL)); + ("Failed to parse com segment"), ("Invalid data")); } break; case GST_JPEG_MARKER_APP0: if (!gst_jpeg_parse_app0 (parse, &seg)) { GST_ELEMENT_WARNING (parse, STREAM, FORMAT, - ("Failed to parse app0 segment"), (NULL)); + ("Failed to parse app0 segment"), ("Invalid data")); } break; case GST_JPEG_MARKER_APP1: if (!gst_jpeg_parse_app1 (parse, &seg)) { GST_ELEMENT_WARNING (parse, STREAM, FORMAT, - ("Failed to parse app1 segment"), (NULL)); + ("Failed to parse app1 segment"), ("Invalid data")); } break; case GST_JPEG_MARKER_APP14: if (!gst_jpeg_parse_app14 (parse, &seg)) { GST_ELEMENT_WARNING (parse, STREAM, FORMAT, - ("Failed to parse app14 segment"), (NULL)); + ("Failed to parse app14 segment"), ("Invalid data")); } break; case GST_JPEG_MARKER_DHT: -- 2.7.4