summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorLimin Wang <lance.lmwang@gmail.com>2021-12-02 18:12:12 +0800
committerLimin Wang <lance.lmwang@gmail.com>2021-12-04 08:26:30 +0800
commit98054e4f018fefb83c1903de99cdd9e9c3394e85 (patch)
tree9f6a34de21c628fc869827b335c2ec5519aae0c3 /libavformat
parent3c74ffb01ac3aa567d166362237117a6ca7c0775 (diff)
avformat/rtsp: load the sdp file with avio_read_to_bprint()
this allows getting rid of the hardcoded max size of SDP. Reviewed-by: Martin Storsjö <martin@martin.st> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/rtsp.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index cd3d284da6..deaed34db4 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -2372,9 +2372,9 @@ static int sdp_read_header(AVFormatContext *s)
{
RTSPState *rt = s->priv_data;
RTSPStream *rtsp_st;
- int size, i, err;
- char *content;
+ int i, err;
char url[MAX_URL_SIZE];
+ AVBPrint bp;
if (!ff_network_init())
return AVERROR(EIO);
@@ -2385,22 +2385,15 @@ 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);
- if (!content) {
+ av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED);
+ err = avio_read_to_bprint(s->pb, &bp, INT_MAX);
+ if (err < 0 ) {
ff_network_close();
- return AVERROR(ENOMEM);
+ av_bprint_finalize(&bp, NULL);
+ return err;
}
- 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);
+ err = ff_sdp_parse(s, bp.str);
+ av_bprint_finalize(&bp, NULL);
if (err) goto fail;
/* open each RTP stream */