summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorLimin Wang <lance.lmwang@gmail.com>2021-12-02 18:33:58 +0800
committerLimin Wang <lance.lmwang@gmail.com>2021-12-04 08:26:30 +0800
commitd782c746a0d31b48b4484421ab80a472db954bc7 (patch)
treeda6a7a54799177e7afdb9e66d9be5b10162be39e /libavformat
parent98054e4f018fefb83c1903de99cdd9e9c3394e85 (diff)
avformat/rtspdec: get rid of the hardcoded max size for 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/rtspdec.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c
index 0e91e3e315..2ada29a2d3 100644
--- a/libavformat/rtspdec.c
+++ b/libavformat/rtspdec.c
@@ -172,7 +172,7 @@ static int rtsp_read_announce(AVFormatContext *s)
{
RTSPState *rt = s->priv_data;
RTSPMessageHeader request = { 0 };
- char sdp[SDP_MAX_SIZE];
+ char *sdp;
int ret;
ret = rtsp_read_request(s, &request, "ANNOUNCE");
@@ -185,18 +185,24 @@ static int rtsp_read_announce(AVFormatContext *s)
rtsp_send_reply(s, RTSP_STATUS_SERVICE, NULL, request.seq);
return AVERROR_OPTION_NOT_FOUND;
}
- if (request.content_length && request.content_length < sizeof(sdp) - 1) {
+ if (request.content_length) {
+ sdp = av_malloc(request.content_length + 1);
+ if (!sdp)
+ return AVERROR(ENOMEM);
+
/* Read SDP */
if (ffurl_read_complete(rt->rtsp_hd, sdp, request.content_length)
< request.content_length) {
av_log(s, AV_LOG_ERROR,
"Unable to get complete SDP Description in ANNOUNCE\n");
rtsp_send_reply(s, RTSP_STATUS_INTERNAL, NULL, request.seq);
+ av_free(sdp);
return AVERROR(EIO);
}
sdp[request.content_length] = '\0';
av_log(s, AV_LOG_VERBOSE, "SDP: %s\n", sdp);
ret = ff_sdp_parse(s, sdp);
+ av_free(sdp);
if (ret)
return ret;
rtsp_send_reply(s, RTSP_STATUS_OK, NULL, request.seq);