[FFmpeg-devel] [PATCH v2] avformat/rtsp: load the sdp file with avio_read_to_bprint()

Martin Storsjö martin at martin.st
Thu Dec 2 10:04:37 EET 2021


On Thu, 2 Dec 2021, lance.lmwang at gmail.com wrote:

> From: Limin Wang <lance.lmwang at gmail.com>
>
> Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> ---
> libavformat/rtsp.c | 23 +++++++++--------------
> 1 file changed, 9 insertions(+), 14 deletions(-)
>
> diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
> index e6a4993..249a019 100644
> --- a/libavformat/rtsp.c
> +++ b/libavformat/rtsp.c
> @@ -2373,9 +2373,10 @@ 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];
> +    AVBPrint bp;
>
>     if (!ff_network_init())
>         return AVERROR(EIO);
> @@ -2386,22 +2387,16 @@ 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';
> -
> +    content = bp.str;
>     err = ff_sdp_parse(s, content);

The content variable could be eliminated here too (to avoid leaving a 
dangling pointer local variable after freeing it).

> -    av_freep(&content);
> +    av_bprint_finalize(&bp, NULL);
>     if (err) goto fail;
>
>     /* open each RTP stream */
> -- 
> 1.8.3.1

This patch seems ok to me - maybe it'd be good to mention in the commit 
message that this allows getting rid of the hardcoded max size here, to 
explain the "why" for the patch, not only the "what"?

Would you be interested in getting rid of the same hardcoded max size in 
rtspdec.c too?

// Martin



More information about the ffmpeg-devel mailing list