[FFmpeg-devel] [PATCH] avformat/avio: check input URLContext value NULL

刘歧 lq at chinaffmpeg.org
Mon Nov 20 09:49:40 EET 2017



> 在 2017年11月20日,15:43,Jun Zhao <mypopydev at gmail.com> 写道:
> 
> 
> 
> On 2017/11/20 15:35, 刘歧 wrote:
>> 
>>> 在 2017年11月20日,15:23,Jun Zhao <mypopydev at gmail.com> 写道:
>>> 
>>> 
>>> 
>>> On 2017/11/20 14:45, Steven Liu wrote:
>>>> fix ticket id: #6846
>>>> 
>>>> Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
>>>> ---
>>>> libavformat/avio.c | 8 ++++++++
>>>> 1 file changed, 8 insertions(+)
>>>> 
>>>> diff --git a/libavformat/avio.c b/libavformat/avio.c
>>>> index 4dc468350c..e719326660 100644
>>>> --- a/libavformat/avio.c
>>>> +++ b/libavformat/avio.c
>>>> @@ -625,6 +625,8 @@ int64_t ffurl_size(URLContext *h)
>>>> 
>>>> int ffurl_get_file_handle(URLContext *h)
>>>> {
>>>> +    if (!h)
>>>> +        return AVERROR(EINVAL);
>>>>    if (!h->prot->url_get_file_handle)
>>> I think (!h && !h->prot && !h->prot->url_get_file_handle) more better
>>> than this
>> maybe you mean (!h || !h->port || !h->prot->url_get_file_handle) , is it?
> No, I means
> if (!h && !h->prot && !h->prot->url_get_file_handle)
>      Do somthing
will segmentation failed if !h is true, that is when h = NULL, and then get h->prot or h->prot->url_get_file_handle will in EXC_BAD_ACCESS.
So i this the better is (!h || !h->port || !h->prot->url_get_file_handle) return error.
> else
>     return error;
> 
>>>>        return -1;
>>>>    return h->prot->url_get_file_handle(h);
>>>> @@ -632,6 +634,8 @@ int ffurl_get_file_handle(URLContext *h)
>>>> 
>>>> int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles)
>>>> {
>>>> +    if (!h)
>>>> +        return AVERROR(EINVAL);
>>>>    if (!h->prot->url_get_multi_file_handle) {
>>>>        if (!h->prot->url_get_file_handle)
>>>>            return AVERROR(ENOSYS);
>>>> @@ -647,6 +651,8 @@ int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles)
>>>> 
>>>> int ffurl_get_short_seek(URLContext *h)
>>>> {
>>>> +    if (!h)
>>>> +        return AVERROR(EINVAL);
>>>>    if (!h->prot->url_get_short_seek)
>>>>        return AVERROR(ENOSYS);
>>>>    return h->prot->url_get_short_seek(h);
>>>> @@ -654,6 +660,8 @@ int ffurl_get_short_seek(URLContext *h)
>>>> 
>>>> int ffurl_shutdown(URLContext *h, int flags)
>>>> {
>>>> +    if (!h)
>>>> +        return AVERROR(EINVAL);
>>>>    if (!h->prot->url_shutdown)
>>>>        return AVERROR(EINVAL);
>>>>    return h->prot->url_shutdown(h, flags);
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel





More information about the ffmpeg-devel mailing list