This avoids accessing NULL pointers in case of error.
Unified · Split
| @@ -324,31 +324,50 @@ av_cold int ff_vc1_decode_init_alloc_tables(VC1Context *v) · 323 unmodified lines | |||
| 324 | v->fieldtx_plane = av_mallocz(s->mb_stride * mb_height); | 324 | v->fieldtx_plane = av_mallocz(s->mb_stride * mb_height); |
| 325 | v->acpred_plane = av_malloc (s->mb_stride * mb_height); | 325 | v->acpred_plane = av_malloc (s->mb_stride * mb_height); |
| 326 | v->over_flags_plane = av_malloc (s->mb_stride * mb_height); | 326 | v->over_flags_plane = av_malloc (s->mb_stride * mb_height); |
| 327 | if (!v->mv_type_mb_plane || !v->direct_mb_plane || !v->forward_mb_plane || | ||
| 328 | !v->fieldtx_plane || !v->acpred_plane || !v->over_flags_plane) | ||
| 329 | goto error; | ||
| 327 | 330 | ||
| 328 | v->n_allocated_blks = s->mb_width + 2; | 331 | v->n_allocated_blks = s->mb_width + 2; |
| 329 | v->block = av_malloc(sizeof(*v->block) * v->n_allocated_blks); | 332 | v->block = av_malloc(sizeof(*v->block) * v->n_allocated_blks); |
| 330 | v->cbp_base = av_malloc(sizeof(v->cbp_base[0]) * 2 * s->mb_stride); | 333 | v->cbp_base = av_malloc(sizeof(v->cbp_base[0]) * 2 * s->mb_stride); |
| 334 | if (!v->block || !v->cbp_base) | ||
| 335 | goto error; | ||
| 331 | v->cbp = v->cbp_base + s->mb_stride; | 336 | v->cbp = v->cbp_base + s->mb_stride; |
| 332 | v->ttblk_base = av_malloc(sizeof(v->ttblk_base[0]) * 2 * s->mb_stride); | 337 | v->ttblk_base = av_malloc(sizeof(v->ttblk_base[0]) * 2 * s->mb_stride); |
| 338 | if (!v->ttblk_base) | ||
| 339 | goto error; | ||
| 333 | v->ttblk = v->ttblk_base + s->mb_stride; | 340 | v->ttblk = v->ttblk_base + s->mb_stride; |
| 334 | v->is_intra_base = av_mallocz(sizeof(v->is_intra_base[0]) * 2 * s->mb_stride); | 341 | v->is_intra_base = av_mallocz(sizeof(v->is_intra_base[0]) * 2 * s->mb_stride); |
| 342 | if (!v->is_intra_base) | ||
| 343 | goto error; | ||
| 335 | v->is_intra = v->is_intra_base + s->mb_stride; | 344 | v->is_intra = v->is_intra_base + s->mb_stride; |
| 336 | v->luma_mv_base = av_malloc(sizeof(v->luma_mv_base[0]) * 2 * s->mb_stride); | 345 | v->luma_mv_base = av_malloc(sizeof(v->luma_mv_base[0]) * 2 * s->mb_stride); |
| 346 | if (!v->luma_mv_base) | ||
| 347 | goto error; | ||
| 337 | v->luma_mv = v->luma_mv_base + s->mb_stride; | 348 | v->luma_mv = v->luma_mv_base + s->mb_stride; |
| 338 | 349 | ||
| 339 | /* allocate block type info in that way so it could be used with s->block_index[] */ | 350 | /* allocate block type info in that way so it could be used with s->block_index[] */ |
| 340 | v->mb_type_base = av_malloc(s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2); | 351 | v->mb_type_base = av_malloc(s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2); |
| 352 | if (!v->mb_type_base) | ||
| 353 | goto error; | ||
| 341 | v->mb_type[0] = v->mb_type_base + s->b8_stride + 1; | 354 | v->mb_type[0] = v->mb_type_base + s->b8_stride + 1; |
| 342 | v->mb_type[1] = v->mb_type_base + s->b8_stride * (mb_height * 2 + 1) + s->mb_stride + 1; | 355 | v->mb_type[1] = v->mb_type_base + s->b8_stride * (mb_height * 2 + 1) + s->mb_stride + 1; |
| 343 | v->mb_type[2] = v->mb_type[1] + s->mb_stride * (mb_height + 1); | 356 | v->mb_type[2] = v->mb_type[1] + s->mb_stride * (mb_height + 1); |
| 344 | 357 | ||
| 345 | /* allocate memory to store block level MV info */ | 358 | /* allocate memory to store block level MV info */ |
| 346 | v->blk_mv_type_base = av_mallocz( s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2); | 359 | v->blk_mv_type_base = av_mallocz( s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2); |
| 360 | if (!v->blk_mv_type_base) | ||
| 361 | goto error; | ||
| 347 | v->blk_mv_type = v->blk_mv_type_base + s->b8_stride + 1; | 362 | v->blk_mv_type = v->blk_mv_type_base + s->b8_stride + 1; |
| 348 | v->mv_f_base = av_mallocz(2 * (s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2)); | 363 | v->mv_f_base = av_mallocz(2 * (s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2)); |
| 364 | if (!v->mv_f_base) | ||
| 365 | goto error; | ||
| 349 | v->mv_f[0] = v->mv_f_base + s->b8_stride + 1; | 366 | v->mv_f[0] = v->mv_f_base + s->b8_stride + 1; |
| 350 | v->mv_f[1] = v->mv_f[0] + (s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2); | 367 | v->mv_f[1] = v->mv_f[0] + (s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2); |
| 351 | v->mv_f_next_base = av_mallocz(2 * (s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2)); | 368 | v->mv_f_next_base = av_mallocz(2 * (s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2)); |
| 369 | if (!v->mv_f_next_base) | ||
| 370 | goto error; | ||
| 352 | v->mv_f_next[0] = v->mv_f_next_base + s->b8_stride + 1; | 371 | v->mv_f_next[0] = v->mv_f_next_base + s->b8_stride + 1; |
| 353 | v->mv_f_next[1] = v->mv_f_next[0] + (s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2); | 372 | v->mv_f_next[1] = v->mv_f_next[0] + (s->b8_stride * (mb_height * 2 + 1) + s->mb_stride * (mb_height + 1) * 2); |
| 354 | 373 | ||
| @@ -362,12 +381,6 @@ av_cold int ff_vc1_decode_init_alloc_tables(VC1Context *v) · 7 unmodified lines | |||
| 362 | } | 381 | } |
| 363 | } | 382 | } |
| 364 | 383 | ||
| 365 | if (!v->mv_type_mb_plane || !v->direct_mb_plane || !v->acpred_plane || !v->over_flags_plane || | ||
| 366 | !v->block || !v->cbp_base || !v->ttblk_base || !v->is_intra_base || !v->luma_mv_base || | ||
| 367 | !v->mb_type_base) { | ||
| 368 | goto error; | ||
| 369 | } | ||
| 370 | |||
| 371 | return 0; | 384 | return 0; |
| 372 | 385 | ||
| 373 | error: | 386 | error: |