equal
deleted
inserted
replaced
159 size = GST_READ_UINT32_LE (data + 4); |
159 size = GST_READ_UINT32_LE (data + 4); |
160 |
160 |
161 GST_DEBUG_OBJECT (element, "fourcc=%" GST_FOURCC_FORMAT ", size=%u", |
161 GST_DEBUG_OBJECT (element, "fourcc=%" GST_FOURCC_FORMAT ", size=%u", |
162 GST_FOURCC_ARGS (fourcc), size); |
162 GST_FOURCC_ARGS (fourcc), size); |
163 |
163 |
164 /* be paranoid: size may be nonsensical value here, such as (guint) -1 */ |
|
165 if (G_UNLIKELY (size > G_MAXINT)) |
|
166 goto bogus_size; |
|
167 |
|
168 if (bufsize < size + 8 + offset) { |
164 if (bufsize < size + 8 + offset) { |
169 GST_DEBUG_OBJECT (element, |
165 GST_DEBUG_OBJECT (element, |
170 "Needed chunk data (%d) is more than available (%d), shortcutting", |
166 "Needed chunk data (%d) is more than available (%d), shortcutting", |
171 size, bufsize - 8 - offset); |
167 size, bufsize - 8 - offset); |
172 size = bufsize - 8 - offset; |
168 size = bufsize - 8 - offset; |
191 too_small: |
187 too_small: |
192 { |
188 { |
193 GST_DEBUG_OBJECT (element, |
189 GST_DEBUG_OBJECT (element, |
194 "Failed to parse chunk header (offset %d, %d available, %d needed)", |
190 "Failed to parse chunk header (offset %d, %d available, %d needed)", |
195 offset, bufsize, 8); |
191 offset, bufsize, 8); |
196 return FALSE; |
|
197 } |
|
198 bogus_size: |
|
199 { |
|
200 GST_ERROR_OBJECT (element, "Broken file: bogus chunk size %u", size); |
|
201 return FALSE; |
192 return FALSE; |
202 } |
193 } |
203 } |
194 } |
204 |
195 |
205 /** |
196 /** |
653 while (size > 8) { |
644 while (size > 8) { |
654 tag = GST_READ_UINT32_LE (data); |
645 tag = GST_READ_UINT32_LE (data); |
655 tsize = GST_READ_UINT32_LE (data + 4); |
646 tsize = GST_READ_UINT32_LE (data + 4); |
656 size -= 8; |
647 size -= 8; |
657 data += 8; |
648 data += 8; |
658 |
|
659 GST_DEBUG ("tag %" GST_FOURCC_FORMAT ", size %u", |
|
660 GST_FOURCC_ARGS (tag), tsize); |
|
661 |
|
662 if (tsize > size) { |
649 if (tsize > size) { |
663 GST_WARNING_OBJECT (element, |
650 GST_WARNING_OBJECT (element, |
664 "Tagsize %d is larger than available data %d", tsize, size); |
651 "Tagsize %d is larger than available data %d", tsize, size); |
665 tsize = size; |
652 tsize = size; |
666 } |
653 } |
699 break; |
686 break; |
700 case GST_RIFF_INFO_IGNR: |
687 case GST_RIFF_INFO_IGNR: |
701 type = GST_TAG_GENRE; |
688 type = GST_TAG_GENRE; |
702 break; |
689 break; |
703 case GST_RIFF_INFO_IKEY: |
690 case GST_RIFF_INFO_IKEY: |
704 type = GST_TAG_KEYWORDS; |
691 type = NULL; /*"Keywords"; */ ; |
705 break; |
692 break; |
706 case GST_RIFF_INFO_ILGT: |
693 case GST_RIFF_INFO_ILGT: |
707 type = NULL; /*"Lightness"; */ |
694 type = NULL; /*"Lightness"; */ |
708 break; |
695 break; |
709 case GST_RIFF_INFO_IMED: |
696 case GST_RIFF_INFO_IMED: |
758 } else { |
745 } else { |
759 GST_WARNING_OBJECT (element, "could not extract %s tag", type); |
746 GST_WARNING_OBJECT (element, "could not extract %s tag", type); |
760 } |
747 } |
761 } |
748 } |
762 |
749 |
763 if (tsize & 1) { |
|
764 tsize++; |
|
765 if (tsize > size) |
|
766 tsize = size; |
|
767 } |
|
768 |
|
769 data += tsize; |
750 data += tsize; |
770 size -= tsize; |
751 size -= tsize; |
771 } |
752 } |
772 |
753 |
773 if (!gst_tag_list_is_empty (taglist)) { |
754 if (!gst_tag_list_is_empty (taglist)) { |