[FFmpeg-devel] [PATCH] avformat/avio: Remove no-op code in url_find_protocol().
Wan-Teh Chang
wtc at google.com
Fri Jul 7 07:27:31 EEST 2017
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.
Is this the expected behavior?
Note: The code snippet shows proto_str cannot possibly contain ','.
This is why the strchr(proto_str, ',') call always returns NULL.
Thanks,
Wan-Teh Chang
More information about the ffmpeg-devel
mailing list