[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