[FFmpeg-cvslog] rtmpproto: Support alternative slist parameter in rtmp URLs

Reimar Döffinger Reimar.Doeffinger at gmx.de
Wed May 7 20:56:39 CEST 2014



On 07.05.2014, at 00:48, git at videolan.org (Uwe L. Korn) wrote:

> ffmpeg | branch: master | Uwe L. Korn <uwelk at xhochy.com> | Mon May  5 21:47:05 2014 +0100| [7ce3bd9614717e545af8fb8455032c807e389b78] | committer: Martin Storsjö
> 
> rtmpproto: Support alternative slist parameter in rtmp URLs
> 
> Support the URL scheme where the playpath is in an RTMP URL is
> passed as the slist argument and the app is given infront of the
> query part of the URL:
> 
> rtmp://host[:port]/[app]?slist=[playpath]
> 
> (other arguments in the query part are stripped as they are not used)
> 
> Signed-off-by: Martin Storsjö <martin at martin.st>
> 
>> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7ce3bd9614717e545af8fb8455032c807e389b78
> ---
> 
> libavformat/rtmpproto.c |   16 ++++++++++++++--
> 1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c
> index 8d8aabc..2962737 100644
> --- a/libavformat/rtmpproto.c
> +++ b/libavformat/rtmpproto.c
> @@ -2382,7 +2382,7 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
> {
>     RTMPContext *rt = s->priv_data;
>     char proto[8], hostname[256], path[1024], auth[100], *fname;
> -    char *old_app;
> +    char *old_app, *qmark, fname_buffer[1024];
>     uint8_t buf[2048];
>     int port;
>     AVDictionary *opts = NULL;
> @@ -2480,7 +2480,19 @@ reconnect:
>     }
> 
>     //extract "app" part from path
> -    if (!strncmp(path, "/ondemand/", 10)) {
> +    qmark = strchr(path, '?');
> +    if (qmark && strstr(qmark, "slist=")) {
> +        char* amp;
> +        // After slist we have the playpath, before the params, the app
> +        av_strlcpy(rt->app, path + 1, qmark - path);
> +        fname = strstr(path, "slist=") + 6;
> +        // Strip any further query parameters from fname
> +        amp = strchr(fname, '&');
> +        if (amp) {
> +            av_strlcpy(fname_buffer, fname, amp - fname + 1);

I would feel a lot more comfortable if those two strlcpy used FFMIN(..., sizeof(destination buffer)) instead.
At least not obvious how they are limited correctly, and I doubt there is not a major risk of future changes opening a trivially (direct stack buffer overflow) exploitable hole here.


More information about the ffmpeg-cvslog mailing list