[FFmpeg-devel] [PATCH] avformat/avio: Remove no-op code in url_find_protocol().

Muhammad Faiz mfcc64 at gmail.com
Fri Jul 7 09:32:37 EEST 2017


On Fri, Jul 7, 2017 at 11:27 AM, Wan-Teh Chang
<wtc-at-google.com at ffmpeg.org> wrote:
> Hi Muhammad,
>
> On Thu, Jul 6, 2017 at 7:56 PM, Muhammad Faiz <mfcc64 at gmail.com> wrote:
>> On Fri, Jul 7, 2017 at 9:18 AM, Wan-Teh Chang
>> <wtc-at-google.com at ffmpeg.org> wrote:
>>> In url_find_protocol(), proto_str is either "file" or a string
>>> consisting of only the characters in URL_SCHEME_CHARS, which does not
>>> include ','. Therefore the strchr(proto_str, ',') call always returns
>>> NULL.
>>>
>>> Note: The code was added in commit
>>> 6161c41817f6e53abb3021d67ca0f19def682718.
>>>
>>> Signed-off-by: Wan-Teh Chang <wtc at google.com>
>>> ---
>>>  libavformat/avio.c | 2 --
>>>  1 file changed, 2 deletions(-)
>>>
>>> diff --git a/libavformat/avio.c b/libavformat/avio.c
>>> index 1e79c9dd5c..64248e098b 100644
>>> --- a/libavformat/avio.c
>>> +++ b/libavformat/avio.c
>>> @@ -263,8 +263,6 @@ static const struct URLProtocol *url_find_protocol(const char *filename)
>>>          av_strlcpy(proto_str, filename,
>>>                     FFMIN(proto_len + 1, sizeof(proto_str)));
>>>
>>> -    if ((ptr = strchr(proto_str, ',')))
>>> -        *ptr = '\0';
>>
>> What about handling "subfile," ?
>
> I don't know what url_find_protocol() is intended to do, but I can
> show you what it actually does.
>
> Here is the relevant code in libavformat/avio.c:
>
> ======================================================================
> #define URL_SCHEME_CHARS                        \
>     "abcdefghijklmnopqrstuvwxyz"                \
>     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"                \
>     "0123456789+-."
>
> static const struct URLProtocol *url_find_protocol(const char *filename)
> {
>     const URLProtocol **protocols;
>     char proto_str[128], proto_nested[128], *ptr;
>     size_t proto_len = strspn(filename, URL_SCHEME_CHARS);
>     int i;
>
>     if (filename[proto_len] != ':' &&
>         (strncmp(filename, "subfile,", 8) || !strchr(filename +
> proto_len + 1, ':')) ||
>         is_dos_path(filename))
>         strcpy(proto_str, "file");
>     else
>         av_strlcpy(proto_str, filename,
>                    FFMIN(proto_len + 1, sizeof(proto_str)));
>
>     if ((ptr = strchr(proto_str, ',')))
>         *ptr = '\0';
> ======================================================================
>
> Since I don't know how "subfile," should be handled by
> url_find_protocol(), I ran the following three test inputs in the
> debugger:
>
> If |filename| is "subfile,", then proto_len is 7 and the if branch
> copies "file" into proto_str.
>
> If |filename| is "subfile,abcdefg", then proto_len is 7 and the if
> branch copies "file" into proto_str.
>
> If |filename| is "subfile,abcdefg:hijk", then proto_len is 7 and the
> else branch copies "subfile" into proto_str.

Oh, I see. I was wrong.

>
> Is this the expected behavior?

I don't know. However it is the previous behavior, so LGTM.

Thank's.


More information about the ffmpeg-devel mailing list