]> granicus.if.org Git - libvpx/commitdiff
webmdec/tests: fix leak when file isn't read to eof
authorJames Zern <jzern@google.com>
Sat, 14 Dec 2013 03:03:08 +0000 (19:03 -0800)
committerJames Zern <jzern@google.com>
Sat, 14 Dec 2013 03:06:21 +0000 (19:06 -0800)
the nestegg packet was only freed by subsequent reads

Change-Id: Ib687a13907861c7575830783e47a596d85169cf1

test/webm_video_source.h
webmdec.c

index 9fc8545935f6f3b11ccf6edc648d04fd56468acc..53b0ba2b41a1f640ed552cf54e6b26697062fbbb 100644 (file)
@@ -90,8 +90,12 @@ class WebMVideoSource : public CompressedVideoSource {
   virtual ~WebMVideoSource() {
     if (input_file_)
       fclose(input_file_);
-    if (nestegg_ctx_)
+    if (nestegg_ctx_ != NULL) {
+      if (pkt_ != NULL) {
+        nestegg_free_packet(pkt_);
+      }
       nestegg_destroy(nestegg_ctx_);
+    }
   }
 
   virtual void Init() {
@@ -136,8 +140,10 @@ class WebMVideoSource : public CompressedVideoSource {
 
       do {
         /* End of this packet, get another. */
-        if (pkt_)
+        if (pkt_ != NULL) {
           nestegg_free_packet(pkt_);
+          pkt_ = NULL;
+        }
 
         int again = nestegg_read_packet(nestegg_ctx_, &pkt_);
         ASSERT_GE(again, 0) << "nestegg_read_packet failed";
index 4bf7c7e2b56d3f202c6d35dce5fdd4f8fde6b763..0c75d7a2c3f29da9070a968491cd9b24187e36c7 100644 (file)
--- a/webmdec.c
+++ b/webmdec.c
@@ -117,8 +117,10 @@ int webm_read_frame(struct WebmInputContext *webm_ctx,
 
     do {
       /* End of this packet, get another. */
-      if (webm_ctx->pkt)
+      if (webm_ctx->pkt) {
         nestegg_free_packet(webm_ctx->pkt);
+        webm_ctx->pkt = NULL;
+      }
 
       if (nestegg_read_packet(webm_ctx->nestegg_ctx, &webm_ctx->pkt) <= 0 ||
           nestegg_packet_track(webm_ctx->pkt, &track)) {
@@ -188,6 +190,9 @@ int webm_guess_framerate(struct WebmInputContext *webm_ctx,
 }
 
 void webm_free(struct WebmInputContext *webm_ctx) {
-  if (webm_ctx && webm_ctx->nestegg_ctx)
+  if (webm_ctx && webm_ctx->nestegg_ctx) {
+    if (webm_ctx->pkt)
+      nestegg_free_packet(webm_ctx->pkt);
     nestegg_destroy(webm_ctx->nestegg_ctx);
+  }
 }