diff --git a/ChangeLog b/ChangeLog index a6ade5eaff..78a5aab683 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-10-08 Sebastian Dröge + + * gst/audioconvert/audioconvert.c: (audio_convert_convert): + Prevent overflows with big buffer when calculating the size of + the intermediate buffer by using gst_util_uint64_scale() instead of + plain arithmetics. Fixes bug #552801. + 2008-10-08 Sebastian Dröge Patch by: Pavel Zeldin diff --git a/gst/audioconvert/audioconvert.c b/gst/audioconvert/audioconvert.c index f86665ac5c..478032494d 100644 --- a/gst/audioconvert/audioconvert.c +++ b/gst/audioconvert/audioconvert.c @@ -517,9 +517,9 @@ gboolean audio_convert_convert (AudioConvertCtx * ctx, gpointer src, gpointer dst, gint samples, gboolean src_writable) { - gint insize, outsize, size; + guint insize, outsize, size; gpointer outbuf, tmpbuf; - gint intemp = 0, outtemp = 0, biggest; + guint intemp = 0, outtemp = 0, biggest; g_return_val_if_fail (ctx != NULL, FALSE); g_return_val_if_fail (src != NULL, FALSE); @@ -537,9 +537,9 @@ audio_convert_convert (AudioConvertCtx * ctx, gpointer src, : sizeof (gint32); if (!ctx->in_default) - intemp = insize * size * 8 / ctx->in.width; + intemp = gst_util_uint64_scale (insize, size * 8, ctx->in.width); if (!ctx->mix_passthrough || !ctx->out_default) - outtemp = outsize * size * 8 / ctx->out.width; + outtemp = gst_util_uint64_scale (outsize, size * 8, ctx->out.width); biggest = MAX (intemp, outtemp); /* see if one of the buffers can be used as temp */