| @@ -3388,15 +3388,11 @@ uint8_t *av_stream_get_side_data(AVStream *st, enum AVPacketSideDataType type, · 3387 unmodified lines |
| 3388 | 3388 | return NULL; |
| 3389 | 3389 | } |
| 3390 | 3390 | |
| 3391 | | −uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, |
| 3392 | | − int size) |
| 3391 | +int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, |
| 3392 | + uint8_t *data, size_t size) |
| 3393 | 3393 | { |
| 3394 | 3394 | AVPacketSideData *sd, *tmp; |
| 3395 | 3395 | int i; |
| 3396 | | − uint8_t *data = av_malloc(size); |
| 3397 | | − |
| 3398 | | − if (!data) |
| 3399 | | − return NULL; |
| 3400 | 3396 | |
| 3401 | 3397 | for (i = 0; i < st->nb_side_data; i++) { |
| 3402 | 3398 | sd = &st->side_data[i]; |
| @@ -3405,14 +3401,16 @@ uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, · 2 unmodified lines |
| 3405 | 3401 | av_freep(&sd->data); |
| 3406 | 3402 | sd->data = data; |
| 3407 | 3403 | sd->size = size; |
| 3408 | | − return sd->data; |
| 3404 | + return 0; |
| 3409 | 3405 | } |
| 3410 | 3406 | } |
| 3411 | 3407 | |
| 3412 | | − tmp = av_realloc_array(st->side_data, st->nb_side_data + 1, sizeof(*tmp)); |
| 3408 | + if ((unsigned) st->nb_side_data + 1 >= INT_MAX / sizeof(*st->side_data)) |
| 3409 | + return AVERROR(ERANGE); |
| 3410 | + |
| 3411 | + tmp = av_realloc(st->side_data, (st->nb_side_data + 1) * sizeof(*tmp)); |
| 3413 | 3412 | if (!tmp) { |
| 3414 | | − av_freep(&data); |
| 3415 | | − return NULL; |
| 3413 | + return AVERROR(ENOMEM); |
| 3416 | 3414 | } |
| 3417 | 3415 | |
| 3418 | 3416 | st->side_data = tmp; |
| @@ -3422,6 +3420,25 @@ uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, · 3 unmodified lines |
| 3422 | 3420 | sd->type = type; |
| 3423 | 3421 | sd->data = data; |
| 3424 | 3422 | sd->size = size; |
| 3423 | + |
| 3424 | + return 0; |
| 3425 | +} |
| 3426 | + |
| 3427 | +uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type, |
| 3428 | + int size) |
| 3429 | +{ |
| 3430 | + int ret; |
| 3431 | + uint8_t *data = av_malloc(size); |
| 3432 | + |
| 3433 | + if (!data) |
| 3434 | + return NULL; |
| 3435 | + |
| 3436 | + ret = av_stream_add_side_data(st, type, data, size); |
| 3437 | + if (ret < 0) { |
| 3438 | + av_freep(&data); |
| 3439 | + return NULL; |
| 3440 | + } |
| 3441 | + |
| 3425 | 3442 | return data; |
| 3426 | 3443 | } |
| 3427 | 3444 | |