diff options
author | Limin Wang <lance.lmwang@gmail.com> | 2021-12-02 13:12:12 +0300 |
---|---|---|
committer | Limin Wang <lance.lmwang@gmail.com> | 2021-12-04 03:26:30 +0300 |
commit | 98054e4f018fefb83c1903de99cdd9e9c3394e85 (patch) | |
tree | 9f6a34de21c628fc869827b335c2ec5519aae0c3 /libavformat | |
parent | 3c74ffb01ac3aa567d166362237117a6ca7c0775 (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.c | 25 |
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 */ |