Mercurial > libavformat.hg
changeset 1837:7b64dd81b38d libavformat
replace the auto array "duration_error" with a malloced array.
prevents stack overflow on some plateforms
patch by Kristian Amlie %kristian A gridmedia P com %
Original thread:
Date: Mar 1, 2007 11:29 PM
Subject: [Ffmpeg-devel] Stack overflow patch
author | gpoirier |
---|---|
date | Fri, 02 Mar 2007 13:23:06 +0000 |
parents | 972e71b84e83 |
children | d1af40ab8ea5 |
files | utils.c |
diffstat | 1 files changed, 8 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/utils.c Fri Mar 02 12:33:59 2007 +0000 +++ b/utils.c Fri Mar 02 13:23:06 2007 +0000 @@ -1814,9 +1814,12 @@ AVPacketList *pktl=NULL, **ppktl; int64_t last_dts[MAX_STREAMS]; int duration_count[MAX_STREAMS]={0}; - double duration_error[MAX_STREAMS][MAX_STD_TIMEBASES]={{0}}; //FIXME malloc()? + double (*duration_error)[MAX_STD_TIMEBASES]; offset_t old_offset = url_ftell(&ic->pb); + duration_error = av_mallocz(MAX_STREAMS * sizeof(*duration_error)); + if (!duration_error) return AVERROR_NOMEM; + for(i=0;i<ic->nb_streams;i++) { st = ic->streams[i]; if(st->codec->codec_type == CODEC_TYPE_VIDEO){ @@ -1927,7 +1930,7 @@ // if(st->codec->codec_type == CODEC_TYPE_VIDEO) // av_log(NULL, AV_LOG_ERROR, "%f\n", dur); if(duration_count[index] < 2) - memset(duration_error, 0, sizeof(duration_error)); + memset(duration_error, 0, MAX_STREAMS * sizeof(*duration_error)); for(i=1; i<MAX_STD_TIMEBASES; i++){ int framerate= get_std_framerate(i); int ticks= lrintf(dur*framerate/(1001*12)); @@ -2050,6 +2053,9 @@ } } #endif + + av_free(duration_error); + return ret; }