vorbisdec: don't put invalid bitrate values into the taglist
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 3 Jun 2009 19:42:39 +0000 (20:42 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 3 Jun 2009 19:42:39 +0000 (20:42 +0100)
Bitrates are stored as 32-bit signed integers in the vorbis
identification headers, but seem to be read incorrectly,
namely as unsigned 32-bit integers, into the vorbis structure
members which are of type long, which makes our check for
values <= 0 fail with files that put -1 in there for unset
values.

ext/vorbis/vorbisdec.c

index 1885be0..c5517bb 100644 (file)
@@ -721,18 +721,18 @@ vorbis_handle_comment_packet (GstVorbisDec * vd, ogg_packet * packet)
   gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
       GST_TAG_ENCODER_VERSION, vd->vi.version,
       GST_TAG_AUDIO_CODEC, "Vorbis", NULL);
-  if (vd->vi.bitrate_nominal > 0) {
+  if (vd->vi.bitrate_nominal > 0 && vd->vi.bitrate_nominal <= 0x7FFFFFFF) {
     gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
         GST_TAG_NOMINAL_BITRATE, (guint) vd->vi.bitrate_nominal, NULL);
     bitrate = vd->vi.bitrate_nominal;
   }
-  if (vd->vi.bitrate_upper > 0) {
+  if (vd->vi.bitrate_upper > 0 && vd->vi.bitrate_upper <= 0x7FFFFFFF) {
     gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
         GST_TAG_MAXIMUM_BITRATE, (guint) vd->vi.bitrate_upper, NULL);
     if (!bitrate)
       bitrate = vd->vi.bitrate_upper;
   }
-  if (vd->vi.bitrate_lower > 0) {
+  if (vd->vi.bitrate_lower > 0 && vd->vi.bitrate_lower <= 0x7FFFFFFF) {
     gst_tag_list_add (vd->taglist, GST_TAG_MERGE_REPLACE,
         GST_TAG_MINIMUM_BITRATE, (guint) vd->vi.bitrate_lower, NULL);
     if (!bitrate)