Mercurial > libavcodec.hg
comparison eval.c @ 10168:6eded00bb689 libavcodec
eval: Check for return value of memory allocations.
| author | ramiro |
|---|---|
| date | Sat, 12 Sep 2009 17:59:19 +0000 |
| parents | 685af2860d80 |
| children | e22a96273dc4 |
comparison
equal
deleted
inserted
replaced
| 10167:0c6cba648271 | 10168:6eded00bb689 |
|---|---|
| 182 | 182 |
| 183 static AVEvalExpr * parse_primary(Parser *p) { | 183 static AVEvalExpr * parse_primary(Parser *p) { |
| 184 AVEvalExpr * d = av_mallocz(sizeof(AVEvalExpr)); | 184 AVEvalExpr * d = av_mallocz(sizeof(AVEvalExpr)); |
| 185 char *next= p->s; | 185 char *next= p->s; |
| 186 int i; | 186 int i; |
| 187 | |
| 188 if (!d) | |
| 189 return NULL; | |
| 187 | 190 |
| 188 /* number */ | 191 /* number */ |
| 189 d->value = av_strtod(p->s, &next); | 192 d->value = av_strtod(p->s, &next); |
| 190 if(next != p->s){ | 193 if(next != p->s){ |
| 191 d->type = e_value; | 194 d->type = e_value; |
| 286 return d; | 289 return d; |
| 287 } | 290 } |
| 288 | 291 |
| 289 static AVEvalExpr * new_eval_expr(int type, int value, AVEvalExpr *p0, AVEvalExpr *p1){ | 292 static AVEvalExpr * new_eval_expr(int type, int value, AVEvalExpr *p0, AVEvalExpr *p1){ |
| 290 AVEvalExpr * e = av_mallocz(sizeof(AVEvalExpr)); | 293 AVEvalExpr * e = av_mallocz(sizeof(AVEvalExpr)); |
| 294 if (!e) | |
| 295 return NULL; | |
| 291 e->type =type ; | 296 e->type =type ; |
| 292 e->value =value ; | 297 e->value =value ; |
| 293 e->param[0] =p0 ; | 298 e->param[0] =p0 ; |
| 294 e->param[1] =p1 ; | 299 e->param[1] =p1 ; |
| 295 return e; | 300 return e; |
| 305 int sign, sign2; | 310 int sign, sign2; |
| 306 AVEvalExpr * e = parse_pow(p, &sign); | 311 AVEvalExpr * e = parse_pow(p, &sign); |
| 307 while(p->s[0]=='^'){ | 312 while(p->s[0]=='^'){ |
| 308 p->s++; | 313 p->s++; |
| 309 e= new_eval_expr(e_pow, 1, e, parse_pow(p, &sign2)); | 314 e= new_eval_expr(e_pow, 1, e, parse_pow(p, &sign2)); |
| 315 if (!e) | |
| 316 return NULL; | |
| 310 if (e->param[1]) e->param[1]->value *= (sign2|1); | 317 if (e->param[1]) e->param[1]->value *= (sign2|1); |
| 311 } | 318 } |
| 312 if (e) e->value *= (sign|1); | 319 if (e) e->value *= (sign|1); |
| 313 return e; | 320 return e; |
| 314 } | 321 } |
| 316 static AVEvalExpr * parse_term(Parser *p){ | 323 static AVEvalExpr * parse_term(Parser *p){ |
| 317 AVEvalExpr * e = parse_factor(p); | 324 AVEvalExpr * e = parse_factor(p); |
| 318 while(p->s[0]=='*' || p->s[0]=='/'){ | 325 while(p->s[0]=='*' || p->s[0]=='/'){ |
| 319 int c= *p->s++; | 326 int c= *p->s++; |
| 320 e= new_eval_expr(c == '*' ? e_mul : e_div, 1, e, parse_factor(p)); | 327 e= new_eval_expr(c == '*' ? e_mul : e_div, 1, e, parse_factor(p)); |
| 328 if (!e) | |
| 329 return NULL; | |
| 321 } | 330 } |
| 322 return e; | 331 return e; |
| 323 } | 332 } |
| 324 | 333 |
| 325 static AVEvalExpr * parse_subexpr(Parser *p) { | 334 static AVEvalExpr * parse_subexpr(Parser *p) { |
| 326 AVEvalExpr * e = parse_term(p); | 335 AVEvalExpr * e = parse_term(p); |
| 327 while(*p->s == '+' || *p->s == '-') { | 336 while(*p->s == '+' || *p->s == '-') { |
| 328 e= new_eval_expr(e_add, 1, e, parse_term(p)); | 337 e= new_eval_expr(e_add, 1, e, parse_term(p)); |
| 338 if (!e) | |
| 339 return NULL; | |
| 329 }; | 340 }; |
| 330 | 341 |
| 331 return e; | 342 return e; |
| 332 } | 343 } |
| 333 | 344 |
| 341 e = parse_subexpr(p); | 352 e = parse_subexpr(p); |
| 342 | 353 |
| 343 while(*p->s == ';') { | 354 while(*p->s == ';') { |
| 344 p->s++; | 355 p->s++; |
| 345 e= new_eval_expr(e_last, 1, e, parse_subexpr(p)); | 356 e= new_eval_expr(e_last, 1, e, parse_subexpr(p)); |
| 357 if (!e) | |
| 358 return NULL; | |
| 346 }; | 359 }; |
| 347 | 360 |
| 348 p->stack_index++; | 361 p->stack_index++; |
| 349 | 362 |
| 350 return e; | 363 return e; |
