rtpdec_asf: Propagate errors from the chained av_open_input_stream

This fixes the crash in issue 2070.

Originally committed as revision 24059 to svn://svn.ffmpeg.org/ffmpeg/trunk
oldabi
Martin Storsjö 15 years ago
parent 748db0fcc4
commit 0fca8d24ee
  1. 8
      libavformat/rtpdec_asf.c
  2. 2
      libavformat/rtpdec_asf.h

@ -91,8 +91,9 @@ static void init_packetizer(ByteIOContext *pb, uint8_t *buf, int len)
pb->buf_end = buf + len; pb->buf_end = buf + len;
} }
void ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p) int ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p)
{ {
int ret = 0;
if (av_strstart(p, "pgmpu:data:application/vnd.ms.wms-hdr.asfv1;base64,", &p)) { if (av_strstart(p, "pgmpu:data:application/vnd.ms.wms-hdr.asfv1;base64,", &p)) {
ByteIOContext pb; ByteIOContext pb;
RTSPState *rt = s->priv_data; RTSPState *rt = s->priv_data;
@ -108,11 +109,14 @@ void ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p)
av_close_input_stream(rt->asf_ctx); av_close_input_stream(rt->asf_ctx);
rt->asf_ctx = NULL; rt->asf_ctx = NULL;
} }
av_open_input_stream(&rt->asf_ctx, &pb, "", &asf_demuxer, NULL); ret = av_open_input_stream(&rt->asf_ctx, &pb, "", &asf_demuxer, NULL);
if (ret < 0)
return ret;
rt->asf_pb_pos = url_ftell(&pb); rt->asf_pb_pos = url_ftell(&pb);
av_free(buf); av_free(buf);
rt->asf_ctx->pb = NULL; rt->asf_ctx->pb = NULL;
} }
return ret;
} }
static int asfrtp_parse_sdp_line(AVFormatContext *s, int stream_index, static int asfrtp_parse_sdp_line(AVFormatContext *s, int stream_index,

@ -30,7 +30,7 @@
* *
* @param s RTSP demux context * @param s RTSP demux context
*/ */
void ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p); int ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p);
/** /**
* Handlers for the x-asf-pf payloads (the payload ID for RTP/ASF). * Handlers for the x-asf-pf payloads (the payload ID for RTP/ASF).

Loading…
Cancel
Save