mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 22:36:33 +00:00
qtdemux: Check sizes of stsc/stco/stts before trying to merge entries
Thanks to Antonio Morales for finding and reporting the issue. Fixes GHSL-2024-246 Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3854 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8059>
This commit is contained in:
parent
0f4dae9b01
commit
5a9e80c01b
1 changed files with 22 additions and 0 deletions
|
@ -10040,6 +10040,21 @@ qtdemux_merge_sample_table (GstQTDemux * qtdemux, QtDemuxStream * stream)
|
|||
return;
|
||||
}
|
||||
|
||||
if (gst_byte_reader_get_remaining (&stream->stts) < 8) {
|
||||
GST_DEBUG_OBJECT (qtdemux, "Too small stts");
|
||||
return;
|
||||
}
|
||||
|
||||
if (stream->stco.size < 8) {
|
||||
GST_DEBUG_OBJECT (qtdemux, "Too small stco");
|
||||
return;
|
||||
}
|
||||
|
||||
if (stream->n_samples_per_chunk == 0) {
|
||||
GST_DEBUG_OBJECT (qtdemux, "No samples per chunk");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Parse the stts to get the sample duration and number of samples */
|
||||
gst_byte_reader_skip_unchecked (&stream->stts, 4);
|
||||
stts_duration = gst_byte_reader_get_uint32_be_unchecked (&stream->stts);
|
||||
|
@ -10051,6 +10066,13 @@ qtdemux_merge_sample_table (GstQTDemux * qtdemux, QtDemuxStream * stream)
|
|||
GST_DEBUG_OBJECT (qtdemux, "sample_duration %d, num_chunks %u", stts_duration,
|
||||
num_chunks);
|
||||
|
||||
if (gst_byte_reader_get_remaining (&stream->stsc) <
|
||||
stream->n_samples_per_chunk * 3 * 4 +
|
||||
(stream->n_samples_per_chunk - 1) * 4) {
|
||||
GST_DEBUG_OBJECT (qtdemux, "Too small stsc");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Now parse stsc, convert chunks into single samples and generate a
|
||||
* new stsc, stts and stsz from this information */
|
||||
gst_byte_writer_init (&stsc);
|
||||
|
|
Loading…
Reference in a new issue