diff --git a/ChangeLog b/ChangeLog index 30244c2e69..e796333c2a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-11-27 Wim Taymans + + * gst-libs/gst/audio/gstbaseaudiosrc.c: + (gst_base_audio_src_get_offset), (gst_base_audio_src_create): + Avoid nasty int overflows after about 12 hours and 25 minutes when these + code paths are triggered. + A free beer to Håvard Graff for finding this! + 2008-11-27 Wim Taymans Patch by: 이문형 diff --git a/gst-libs/gst/audio/gstbaseaudiosrc.c b/gst-libs/gst/audio/gstbaseaudiosrc.c index 21a8de6385..369551bc39 100644 --- a/gst-libs/gst/audio/gstbaseaudiosrc.c +++ b/gst-libs/gst/audio/gstbaseaudiosrc.c @@ -718,7 +718,7 @@ gst_base_audio_src_get_offset (GstBaseAudioSrc * src) if (diff >= segtotal) { GST_DEBUG_OBJECT (src, "dropped, align to segment %d", segdone); /* sample would be dropped, position to next playable position */ - sample = (segdone - segtotal + 1) * sps; + sample = ((guint64) (segdone - segtotal + 1)) * sps; } return sample; @@ -922,7 +922,7 @@ gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length, ringbuffer->segbase -= segment_diff; /* we calculate the new sample value */ - new_sample = new_first_segment * sps; + new_sample = ((guint64) new_first_segment) * sps; /* and get the relative time to this -> our new timestamp */ timestamp =