[2/2] applehttp: Properly clean up if unable to probe a segment

Message ID 1323887877-20634-2-git-send-email-martin@martin.st
State Committed
Commit 115a57302a7d6661426304bec3a5bc72d0edf4b0
Headers show

Commit Message

Martin Storsjö Dec. 14, 2011, 6:37 p.m.
This avoids a segfault if the probe function wasn't able to
determine the format.

The bug was found by Panagiotis H.M. Issaris.
---
 libavformat/applehttp.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

Comments

Luca Barbato Dec. 14, 2011, 7:26 p.m. | #1
On 14/12/11 19:37, Martin Storsjö wrote:
> This avoids a segfault if the probe function wasn't able to
> determine the format.
>
> The bug was found by Panagiotis H.M. Issaris.
> ---
>   libavformat/applehttp.c |    9 ++++++++-
>   1 files changed, 8 insertions(+), 1 deletions(-)
>

Ok.

Patch

diff --git a/libavformat/applehttp.c b/libavformat/applehttp.c
index 19f2b20..6c4d56d 100644
--- a/libavformat/applehttp.c
+++ b/libavformat/applehttp.c
@@ -503,8 +503,15 @@  static int applehttp_read_header(AVFormatContext *s, AVFormatParameters *ap)
         v->pb.seekable = 0;
         ret = av_probe_input_buffer(&v->pb, &in_fmt, v->segments[0]->url,
                                     NULL, 0, 0);
-        if (ret < 0)
+        if (ret < 0) {
+            /* Free the ctx - it isn't initialized properly at this point,
+             * so avformat_close_input shouldn't be called. If
+             * avformat_open_input fails below, it frees and zeros the
+             * context, so it doesn't need any special treatment like this. */
+            avformat_free_context(v->ctx);
+            v->ctx = NULL;
             goto fail;
+        }
         v->ctx->pb       = &v->pb;
         ret = avformat_open_input(&v->ctx, v->segments[0]->url, in_fmt, NULL);
         if (ret < 0)