Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/libavdevice/iec61883.c b/libavdevice/iec61883.c
- index 7d4d37847c..b09929eb56 100644
- --- a/libavdevice/iec61883.c
- +++ b/libavdevice/iec61883.c
- @@ -118,7 +118,7 @@ static int iec61883_callback(unsigned char *data, int length,
- goto exit;
- }
- - packet->buf = av_malloc(length);
- + packet->buf = av_malloc(length + AV_INPUT_BUFFER_PADDING_SIZE);
- if (!packet->buf) {
- av_free(packet);
- ret = -1;
- @@ -127,6 +127,7 @@ static int iec61883_callback(unsigned char *data, int length,
- packet->len = length;
- memcpy(packet->buf, data, length);
- + memset(packet->buf + length, 0, AV_INPUT_BUFFER_PADDING_SIZE);
- if (dv->queue_first) {
- dv->queue_last->next = packet;
- @@ -200,13 +201,21 @@ static int iec61883_parse_queue_dv(struct iec61883_data *dv, AVPacket *pkt)
- size = avpriv_dv_produce_packet(dv->dv_demux, pkt,
- packet->buf, packet->len, -1);
- dv->queue_first = packet->next;
- + if (size < 0)
- + av_free(packet->buf);
- av_free(packet);
- dv->packets--;
- - if (size > 0)
- - return size;
- + if (size < 0)
- + return -1;
- - return -1;
- + if (av_packet_from_data(pkt, pkt->data, pkt->size) < 0) {
- + av_freep(&pkt->data);
- + av_packet_unref(pkt);
- + return -1;
- + }
- +
- + return size;
- }
- static int iec61883_parse_queue_hdv(struct iec61883_data *dv, AVPacket *pkt)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement