mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-03 04:52:28 +00:00
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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3943>
This commit is contained in:
parent
cbc7374c95
commit
c61db410f3
1 changed files with 25 additions and 15 deletions
|
@ -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;
|
||||
}
|
||||
|
@ -769,25 +779,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:
|
||||
|
|
Loading…
Reference in a new issue