[PATCH] mxfdec: fix NULL pointer dereference in mxf_read_packet_old
Metadata streams have priv_data set to NULL. Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> --- libavformat/mxfdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index a1a79ce..2ad0c28 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -3135,7 +3135,7 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) if (mxf->nb_index_tables >= 1 && mxf->current_edit_unit < t->nb_ptses) { pkt->dts = mxf->current_edit_unit + t->first_dts; pkt->pts = t->ptses[mxf->current_edit_unit]; - } else if (track->intra_only) { + } else if (track && track->intra_only) { /* intra-only -> PTS = EditUnit. * let utils.c figure out DTS since it can be < PTS if low_delay = 0 (Sony IMX30) */ pkt->pts = mxf->current_edit_unit; -- 2.10.2
On 17.11.2016 22:55, Andreas Cadhalpun wrote:
Metadata streams have priv_data set to NULL.
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> --- libavformat/mxfdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index a1a79ce..2ad0c28 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -3135,7 +3135,7 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) if (mxf->nb_index_tables >= 1 && mxf->current_edit_unit < t->nb_ptses) { pkt->dts = mxf->current_edit_unit + t->first_dts; pkt->pts = t->ptses[mxf->current_edit_unit]; - } else if (track->intra_only) { + } else if (track && track->intra_only) { /* intra-only -> PTS = EditUnit. * let utils.c figure out DTS since it can be < PTS if low_delay = 0 (Sony IMX30) */ pkt->pts = mxf->current_edit_unit;
Ping. It would be good to have this fixed in 3.2.1. Best regards, Andreas
On 22/11/2016 22:43, Andreas Cadhalpun wrote:
On 17.11.2016 22:55, Andreas Cadhalpun wrote:
Metadata streams have priv_data set to NULL.
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> --- libavformat/mxfdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index a1a79ce..2ad0c28 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -3135,7 +3135,7 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) if (mxf->nb_index_tables >= 1 && mxf->current_edit_unit < t->nb_ptses) { pkt->dts = mxf->current_edit_unit + t->first_dts; pkt->pts = t->ptses[mxf->current_edit_unit]; - } else if (track->intra_only) { + } else if (track && track->intra_only) { /* intra-only -> PTS = EditUnit. * let utils.c figure out DTS since it can be < PTS if low_delay = 0 (Sony IMX30) */ pkt->pts = mxf->current_edit_unit;
Ping. It would be good to have this fixed in 3.2.1.
Best regards, Andreas
LGTM. -- Josh
On 22.11.2016 23:50, Josh de Kock wrote:
On 22/11/2016 22:43, Andreas Cadhalpun wrote:
On 17.11.2016 22:55, Andreas Cadhalpun wrote:
Metadata streams have priv_data set to NULL.
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> --- libavformat/mxfdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index a1a79ce..2ad0c28 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -3135,7 +3135,7 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) if (mxf->nb_index_tables >= 1 && mxf->current_edit_unit < t->nb_ptses) { pkt->dts = mxf->current_edit_unit + t->first_dts; pkt->pts = t->ptses[mxf->current_edit_unit]; - } else if (track->intra_only) { + } else if (track && track->intra_only) { /* intra-only -> PTS = EditUnit. * let utils.c figure out DTS since it can be < PTS if low_delay = 0 (Sony IMX30) */ pkt->pts = mxf->current_edit_unit;
Ping. It would be good to have this fixed in 3.2.1.
Best regards, Andreas
LGTM.
Pushed. Best regards, Andreas
On Thu, 17 Nov 2016, Andreas Cadhalpun wrote:
Metadata streams have priv_data set to NULL.
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> --- libavformat/mxfdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index a1a79ce..2ad0c28 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -3135,7 +3135,7 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) if (mxf->nb_index_tables >= 1 && mxf->current_edit_unit < t->nb_ptses) { pkt->dts = mxf->current_edit_unit + t->first_dts; pkt->pts = t->ptses[mxf->current_edit_unit]; - } else if (track->intra_only) { + } else if (track && track->intra_only) { /* intra-only -> PTS = EditUnit. * let utils.c figure out DTS since it can be < PTS if low_delay = 0 (Sony IMX30) */ pkt->pts = mxf->current_edit_unit;
Was this patch really necessary? Because as far as I see, metadata streams (which have priv_data set to NULL) always have a AVMEDIA_TYPE_DATA st->codecpar->codec_type, and since this code calculates video pts, it never encounters a NULL track. So is it OK to revert? Thanks, Marton
ons 2018-05-30 klockan 23:26 +0200 skrev Marton Balint:
On Thu, 17 Nov 2016, Andreas Cadhalpun wrote:
Metadata streams have priv_data set to NULL.
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
libavformat/mxfdec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index a1a79ce..2ad0c28 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -3135,7 +3135,7 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) if (mxf->nb_index_tables >= 1 && mxf->current_edit_unit < t->nb_ptses) { pkt->dts = mxf->current_edit_unit + t->first_dts; pkt->pts = t->ptses[mxf->current_edit_unit]; - } else if (track->intra_only) { + } else if (track && track->intra_only) { /* intra-only -> PTS = EditUnit. * let utils.c figure out DTS since it can be < PTS if low_delay = 0 (Sony IMX30) */ pkt->pts = mxf->current_edit_unit;
Was this patch really necessary? Because as far as I see, metadata streams (which have priv_data set to NULL) always have a AVMEDIA_TYPE_DATA st->codecpar->codec_type, and since this code calculates video pts, it never encounters a NULL track.
So is it OK to revert?
Maybe? It doesn't really hurt, but it also makes it seem like track can be NULL I really want static analysis on code like this... /Tomas
participants (4)
-
Andreas Cadhalpun -
Josh de Kock -
Marton Balint -
Tomas Härdin