mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
gst/typefind/gsttypefindfunctions.c: Fix invalid memory access to region before peek'd data (#332964).
Original commit message from CVS: * gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset): Fix invalid memory access to region before peek'd data (#332964).
This commit is contained in:
parent
66db4c0a0a
commit
c5de07b3d9
2 changed files with 9 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2006-03-09 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
* gst/typefind/gsttypefindfunctions.c: (mp3_type_find_at_offset):
|
||||||
|
Fix invalid memory access to region before peek'd data (#332964).
|
||||||
|
|
||||||
2006-03-09 Wim Taymans <wim@fluendo.com>
|
2006-03-09 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* ext/pango/gsttextoverlay.c: (gst_text_overlay_init):
|
* ext/pango/gsttextoverlay.c: (gst_text_overlay_init):
|
||||||
|
|
|
@ -586,6 +586,7 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off,
|
||||||
guint * found_layer, GstTypeFindProbability * found_prob)
|
guint * found_layer, GstTypeFindProbability * found_prob)
|
||||||
{
|
{
|
||||||
guint8 *data = NULL;
|
guint8 *data = NULL;
|
||||||
|
guint8 *data_end;
|
||||||
guint size;
|
guint size;
|
||||||
guint64 skipped;
|
guint64 skipped;
|
||||||
gint last_free_offset = -1;
|
gint last_free_offset = -1;
|
||||||
|
@ -605,6 +606,7 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off,
|
||||||
} while (size > 10 && !data);
|
} while (size > 10 && !data);
|
||||||
if (!data)
|
if (!data)
|
||||||
break;
|
break;
|
||||||
|
data_end = data + size;
|
||||||
}
|
}
|
||||||
if (*data == 0xFF) {
|
if (*data == 0xFF) {
|
||||||
guint8 *head_data = NULL;
|
guint8 *head_data = NULL;
|
||||||
|
@ -619,7 +621,8 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off,
|
||||||
guint prev_channels = 0, prev_samplerate = 0;
|
guint prev_channels = 0, prev_samplerate = 0;
|
||||||
gboolean free = FALSE;
|
gboolean free = FALSE;
|
||||||
|
|
||||||
if (offset + 4 <= skipped + size) {
|
if ((gint64) (offset - skipped + 4) >= 0 &&
|
||||||
|
data + offset - skipped + 4 < data_end) {
|
||||||
head_data = data + offset - skipped;
|
head_data = data + offset - skipped;
|
||||||
} else {
|
} else {
|
||||||
head_data = gst_type_find_peek (tf, offset + start_off, 4);
|
head_data = gst_type_find_peek (tf, offset + start_off, 4);
|
||||||
|
|
Loading…
Reference in a new issue