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

Submitted by Steven Liu on Nov. 20, 2017, 6:45 a.m.

Details

Message ID 20171120064551.29734-1-lq@chinaffmpeg.org
State Superseded
Headers show

Commit Message

Steven Liu Nov. 20, 2017, 6:45 a.m.
fix ticket id: #6846

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
---
 libavformat/avio.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Jun Zhao Nov. 20, 2017, 7:23 a.m.
On 2017/11/20 14:45, Steven Liu wrote:
> fix ticket id: #6846
>
> Signed-off-by: Steven Liu <lq@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

>          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);
Steven Liu Nov. 20, 2017, 7:35 a.m.
> 在 2017年11月20日,15:23,Jun Zhao <mypopydev@gmail.com> 写道:
> 
> 
> 
> On 2017/11/20 14:45, Steven Liu wrote:
>> fix ticket id: #6846
>> 
>> Signed-off-by: Steven Liu <lq@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?
> 
>>         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);
Jun Zhao Nov. 20, 2017, 7:43 a.m.
On 2017/11/20 15:35, 刘歧 wrote:
>
>> 在 2017年11月20日,15:23,Jun Zhao <mypopydev@gmail.com> 写道:
>>
>>
>>
>> On 2017/11/20 14:45, Steven Liu wrote:
>>> fix ticket id: #6846
>>>
>>> Signed-off-by: Steven Liu <lq@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
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);
Steven Liu Nov. 20, 2017, 7:49 a.m.
> 在 2017年11月20日,15:43,Jun Zhao <mypopydev@gmail.com> 写道:
> 
> 
> 
> On 2017/11/20 15:35, 刘歧 wrote:
>> 
>>> 在 2017年11月20日,15:23,Jun Zhao <mypopydev@gmail.com> 写道:
>>> 
>>> 
>>> 
>>> On 2017/11/20 14:45, Steven Liu wrote:
>>>> fix ticket id: #6846
>>>> 
>>>> Signed-off-by: Steven Liu <lq@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@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Jun Zhao Nov. 20, 2017, 7:51 a.m.
On 2017/11/20 15:43, Jun Zhao wrote:
>
> On 2017/11/20 15:35, 刘歧 wrote:
>>> 在 2017年11月20日,15:23,Jun Zhao <mypopydev@gmail.com> 写道:
>>>
>>>
>>>
>>> On 2017/11/20 14:45, Steven Liu wrote:
>>>> fix ticket id: #6846
>>>>
>>>> Signed-off-by: Steven Liu <lq@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
> else
>     return error;
Made a mistake in the comments, shame :(

you are right.

>>>>         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);

Patch hide | download patch | download mbox

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)
         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);