[FFmpeg-devel] [PATCH 1/5] avformat/rtsp: make use of avio_get_str() to load the sdp
lance.lmwang at gmail.com
lance.lmwang at gmail.com
Wed Dec 1 15:39:10 EET 2021
From: Limin Wang <lance.lmwang at gmail.com>
Signed-off-by: Limin Wang <lance.lmwang at 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
More information about the ffmpeg-devel
mailing list