diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2004-02-18 12:49:30 +0000 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2004-02-18 12:49:30 +0000 |
commit | 69f5de1855fb7a8d188f8f915887a9b00c7795f2 (patch) | |
tree | 7818efad4d4cf36ad76743d4cac4ab480c21f598 /libavcodec/eval.c | |
parent | 9d656110966fbdde0fd1d2e685f3ed3633ba3596 (diff) | |
download | ffmpeg-69f5de1855fb7a8d188f8f915887a9b00c7795f2.tar.gz |
avoid negative array indices
Originally committed as revision 2794 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/eval.c')
-rw-r--r-- | libavcodec/eval.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/libavcodec/eval.c b/libavcodec/eval.c index 714ba046c5..aead600e83 100644 --- a/libavcodec/eval.c +++ b/libavcodec/eval.c @@ -115,12 +115,16 @@ static void evalPrimary(Parser *p){ p->s++; // "(" evalExpression(p); d= pop(p); - p->s++; // ")" or "," - if(p->s[-1]== ','){ + if(p->s[0]== ','){ + p->s++; // "," evalExpression(p); d2= pop(p); - p->s++; // ")" } + if(p->s[0] != ')'){ + av_log(NULL, AV_LOG_ERROR, "Parser: missing ) in \"%s\"\n", next); + return; + } + p->s++; // ")" if( strmatch(next, "sinh" ) ) d= sinh(d); else if( strmatch(next, "cosh" ) ) d= cosh(d); @@ -136,7 +140,9 @@ static void evalPrimary(Parser *p){ else if( strmatch(next, "max" ) ) d= d > d2 ? d : d2; else if( strmatch(next, "min" ) ) d= d < d2 ? d : d2; else if( strmatch(next, "gt" ) ) d= d > d2 ? 1.0 : 0.0; + else if( strmatch(next, "gte" ) ) d= d >= d2 ? 1.0 : 0.0; else if( strmatch(next, "lt" ) ) d= d > d2 ? 0.0 : 1.0; + else if( strmatch(next, "lte" ) ) d= d >= d2 ? 0.0 : 1.0; else if( strmatch(next, "eq" ) ) d= d == d2 ? 1.0 : 0.0; // else if( strmatch(next, "l1" ) ) d= 1 + d2*(d - 1); // else if( strmatch(next, "sq01" ) ) d= (d >= 0.0 && d <=1.0) ? 1.0 : 0.0; @@ -164,10 +170,6 @@ static void evalPrimary(Parser *p){ } } - if(p->s[-1]!= ')'){ - av_log(NULL, AV_LOG_ERROR, "Parser: missing ) in \"%s\"\n", next); - return; - } push(p, d); } |