summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-12-01 13:32:22 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-12-01 13:32:22 +0200
commitd0949baf3dadea6021d54abef6802fed5a06af75 (patch)
tree40fe296b2a707a1137f9986472bd40605d9bc454
parent50e7096a86ea120ca4b5b42294a8d80433803cc6 (diff)
qtdemux: Fix out of bounds read in tag parsing code
We can't simply assume that the length of the tag value as given inside the stream is correct but should also check against the amount of data we have actually available. https://bugzilla.gnome.org/show_bug.cgi?id=775451
-rw-r--r--gst/isomp4/qtdemux.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index c5ff799db..b1d2de876 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -11767,7 +11767,7 @@ qtdemux_tag_add_str_full (GstQTDemux * qtdemux, GstTagList * taglist,
} else {
len = QT_UINT32 (node->data);
type = QT_UINT32 ((guint8 *) node->data + 4);
- if ((type >> 24) == 0xa9) {
+ if ((type >> 24) == 0xa9 && len > 8 + 4) {
gint str_len;
gint lang_code;
@@ -11786,7 +11786,7 @@ qtdemux_tag_add_str_full (GstQTDemux * qtdemux, GstTagList * taglist,
}
offset = 12;
- len = str_len + 8 + 4; /* remove trailing strings that we don't use */
+ len = MIN (len, str_len + 8 + 4); /* remove trailing strings that we don't use */
GST_DEBUG_OBJECT (qtdemux, "found international text tag");
if (lang_code < 0x800) { /* MAC encoded string */