riff-media: Check for valid channels/rate before using the values
authorSebastian Dröge <sebastian@centricular.com>
Sun, 15 Jan 2017 17:31:56 +0000 (18:31 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Sun, 15 Jan 2017 17:32:34 +0000 (18:32 +0100)
Otherwise we might divide by zero or otherwise create invalid caps.

https://bugzilla.gnome.org/show_bug.cgi?id=777262

gst-libs/gst/riff/riff-media.c

index 7a83226..328036d 100644 (file)
@@ -1615,7 +1615,8 @@ gst_riff_create_audio_caps (guint16 codec_id,
           subformat_guid[2] == 0xaa000080 && subformat_guid[3] == 0x719b3800) {
         if (subformat_guid[0] == 0x00000001) {
           GST_DEBUG ("PCM");
-          if (strf != NULL) {
+          if (strf != NULL && strf->blockalign != 0 && strf->channels != 0
+              && strf->rate != 0) {
             gint ba = strf->blockalign;
             gint wd = ba * 8 / strf->channels;
             gint ws;
@@ -1648,7 +1649,8 @@ gst_riff_create_audio_caps (guint16 codec_id,
           }
         } else if (subformat_guid[0] == 0x00000003) {
           GST_DEBUG ("FLOAT");
-          if (strf != NULL) {
+          if (strf != NULL && strf->blockalign != 0 && strf->channels != 0
+              && strf->rate != 0) {
             gint ba = strf->blockalign;
             gint wd = ba * 8 / strf->channels;