... | ... |
@@ -430,9 +430,15 @@ static MpegTSService *mpegts_add_service(MpegTSWrite *ts, int sid, |
430 | 430 |
return NULL; |
431 | 431 |
service->pmt.pid = ts->pmt_start_pid + ts->nb_services; |
432 | 432 |
service->sid = sid; |
433 |
+ service->pcr_pid = 0x1fff; |
|
433 | 434 |
service->provider_name = av_strdup(provider_name); |
434 | 435 |
service->name = av_strdup(name); |
435 |
- service->pcr_pid = 0x1fff; |
|
436 |
+ if (!service->provider_name || !service->name) { |
|
437 |
+ free(service->provider_name); |
|
438 |
+ free(service->name); |
|
439 |
+ free(service); |
|
440 |
+ return NULL; |
|
441 |
+ } |
|
436 | 442 |
dynarray_add(&ts->services, &ts->nb_services, service); |
437 | 443 |
return service; |
438 | 444 |
} |
... | ... |
@@ -474,6 +480,9 @@ static int mpegts_write_header(AVFormatContext *s) |
474 | 474 |
service = mpegts_add_service(ts, ts->service_id, |
475 | 475 |
provider_name, service_name); |
476 | 476 |
|
477 |
+ if (!service) |
|
478 |
+ return AVERROR(ENOMEM); |
|
479 |
+ |
|
477 | 480 |
service->pmt.write_packet = section_write_packet; |
478 | 481 |
service->pmt.opaque = s; |
479 | 482 |
service->pmt.cc = 15; |
... | ... |
@@ -491,8 +500,10 @@ static int mpegts_write_header(AVFormatContext *s) |
491 | 491 |
ts->sdt.opaque = s; |
492 | 492 |
|
493 | 493 |
pids = av_malloc(s->nb_streams * sizeof(*pids)); |
494 |
- if (!pids) |
|
494 |
+ if (!pids) { |
|
495 |
+ av_free(service); |
|
495 | 496 |
return AVERROR(ENOMEM); |
497 |
+ } |
|
496 | 498 |
|
497 | 499 |
/* assign pids to each stream */ |
498 | 500 |
for (i = 0; i < s->nb_streams; i++) { |
... | ... |
@@ -564,7 +575,10 @@ static int mpegts_write_header(AVFormatContext *s) |
564 | 564 |
ret = AVERROR(EINVAL); |
565 | 565 |
goto fail; |
566 | 566 |
} |
567 |
- ast = avformat_new_stream(ts_st->amux, NULL); |
|
567 |
+ if (!(ast = avformat_new_stream(ts_st->amux, NULL))) { |
|
568 |
+ ret = AVERROR(ENOMEM); |
|
569 |
+ goto fail; |
|
570 |
+ } |
|
568 | 571 |
ret = avcodec_copy_context(ast->codec, st->codec); |
569 | 572 |
if (ret != 0) |
570 | 573 |
goto fail; |
... | ... |
@@ -633,6 +647,7 @@ static int mpegts_write_header(AVFormatContext *s) |
633 | 633 |
return 0; |
634 | 634 |
|
635 | 635 |
fail: |
636 |
+ av_free(service); |
|
636 | 637 |
av_free(pids); |
637 | 638 |
for (i = 0; i < s->nb_streams; i++) { |
638 | 639 |
st = s->streams[i]; |