From: Limin Wang <lance.lmw...@gmail.com> Signed-off-by: Limin Wang <lance.lmw...@gmail.com> --- libavformat/rtsp.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index e6a4993..ec8be8b 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -2369,11 +2369,29 @@ static void append_source_addrs(char *buf, int size, const char *name, av_strlcatf(buf, size, ",%s", addrs[i]->addr); } +static char *read_sdp_str(AVIOContext *pb, int size) +{ + int n; + char *str; + + if (size < 0 || size == INT_MAX) + return NULL; + + str = av_malloc(size + 1); + if (!str) + return NULL; + n = avio_get_str(pb, size, str, size + 1); + if (n < size) + avio_skip(pb, size - n); + return str; +} + + static int sdp_read_header(AVFormatContext *s) { RTSPState *rt = s->priv_data; RTSPStream *rtsp_st; - int size, i, err; + int i, err; char *content; char url[MAX_URL_SIZE]; @@ -2386,19 +2404,11 @@ static int sdp_read_header(AVFormatContext *s) rt->lower_transport = RTSP_LOWER_TRANSPORT_CUSTOM; /* read the whole sdp file */ - /* XXX: better loading */ - content = av_malloc(SDP_MAX_SIZE); + content = read_sdp_str(s->pb, SDP_MAX_SIZE - 1); if (!content) { ff_network_close(); return AVERROR(ENOMEM); } - size = avio_read(s->pb, content, SDP_MAX_SIZE - 1); - if (size <= 0) { - av_free(content); - ff_network_close(); - return AVERROR_INVALIDDATA; - } - content[size] ='\0'; err = ff_sdp_parse(s, content); av_freep(&content); -- 1.8.3.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".