[FFmpeg-devel] [PATCH] libavformat/hls: Observe Set-Cookie headers

Micah Galizia micahgalizia at gmail.com
Sat May 6 21:28:10 EEST 2017

On 2017-05-05 09:28 PM, wm4 wrote:
> On Fri,  5 May 2017 20:55:05 -0400
> Micah Galizia <micahgalizia at gmail.com> wrote:
>> Signed-off-by: Micah Galizia <micahgalizia at gmail.com>
>> ---
>>   libavformat/hls.c | 12 ++++++++++--
>>   1 file changed, 10 insertions(+), 2 deletions(-)
>> diff --git a/libavformat/hls.c b/libavformat/hls.c
>> index bac53a4350..bda9abecfa 100644
>> --- a/libavformat/hls.c
>> +++ b/libavformat/hls.c
>> @@ -630,8 +630,16 @@ static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url,
>>       ret = s->io_open(s, pb, url, AVIO_FLAG_READ, &tmp);
>>       if (ret >= 0) {
>>           // update cookies on http response with setcookies.
>> -        void *u = (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : s->pb;
>> -        update_options(&c->cookies, "cookies", u);
>> +        char *new_cookies = NULL;
>> +
>> +        if (s->flags ^ AVFMT_FLAG_CUSTOM_IO)
>> +            av_opt_get(*pb, "cookies", AV_OPT_SEARCH_CHILDREN, (uint8_t**)&new_cookies);
> Did you mean & instead of ^?

No, the original code was structured to set *u to null (and thus did not 
copy cookies) iff AVFMT_FLAG_CUSTOM_IO was set in the flags.  So using ^ 
is logically equivalent -- cookies are copied only if 

> Did you find out yet what difference AVFMT_FLAG_CUSTOM_IO is supposed
> to make in the existing code?
Yes, I wrote back about it a day or two ago... here is the reference to 
its original inclusion: 
When the code was originally implemented we were using s->pb->opaque, 
which in FFMPEG we could assume was a URLContext with options (one of 
them possibly being "cookies").

Based on the email above, that wasn't true for other apps like mplayer, 
and could cause crashes trying to treat opaque as a URLContext. So that 
is the purpose of checking the AVFMT_FLAG_CUSTOM_IO flag (way back in 2013).

Now though, we don't seem to touch opaque at all. The options are stored 
in AVIOContext's av_class, which does have options.  Based on this I 
think both patches are safe: this version has less change, but the 
original gets rid of the check against AVFMT_FLAG_CUSTOM_IO that I don't 
think we need anymore.

I hope that clears things up.

More information about the ffmpeg-devel mailing list