Commit 0cbff027 authored by Kristian Amlie's avatar Kristian Amlie Committed by Guillaume Poirier

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

Originally committed as revision 8194 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 57d4d6e7
...@@ -1814,9 +1814,12 @@ int av_find_stream_info(AVFormatContext *ic) ...@@ -1814,9 +1814,12 @@ int av_find_stream_info(AVFormatContext *ic)
AVPacketList *pktl=NULL, **ppktl; AVPacketList *pktl=NULL, **ppktl;
int64_t last_dts[MAX_STREAMS]; int64_t last_dts[MAX_STREAMS];
int duration_count[MAX_STREAMS]={0}; 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); 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++) { for(i=0;i<ic->nb_streams;i++) {
st = ic->streams[i]; st = ic->streams[i];
if(st->codec->codec_type == CODEC_TYPE_VIDEO){ if(st->codec->codec_type == CODEC_TYPE_VIDEO){
...@@ -1927,7 +1930,7 @@ int av_find_stream_info(AVFormatContext *ic) ...@@ -1927,7 +1930,7 @@ int av_find_stream_info(AVFormatContext *ic)
// if(st->codec->codec_type == CODEC_TYPE_VIDEO) // if(st->codec->codec_type == CODEC_TYPE_VIDEO)
// av_log(NULL, AV_LOG_ERROR, "%f\n", dur); // av_log(NULL, AV_LOG_ERROR, "%f\n", dur);
if(duration_count[index] < 2) 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++){ for(i=1; i<MAX_STD_TIMEBASES; i++){
int framerate= get_std_framerate(i); int framerate= get_std_framerate(i);
int ticks= lrintf(dur*framerate/(1001*12)); int ticks= lrintf(dur*framerate/(1001*12));
...@@ -2050,6 +2053,9 @@ int av_find_stream_info(AVFormatContext *ic) ...@@ -2050,6 +2053,9 @@ int av_find_stream_info(AVFormatContext *ic)
} }
} }
#endif #endif
av_free(duration_error);
return ret; return ret;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment