shithub: dav1d

Download patch

ref: 2366b77ad49d66f684e4660777b9b032dd679aad
parent: e3b5d4d044506f9e0e95e79b3de42fd94386cc61
author: Janne Grunau <janne-vlc@jannau.net>
date: Mon Nov 5 18:35:17 EST 2018

submit_frame: always 'goto error' for proper cleanup

--- a/src/decode.c
+++ b/src/decode.c
@@ -2809,7 +2809,7 @@
 
 int dav1d_submit_frame(Dav1dContext *const c) {
     Dav1dFrameContext *f;
-    int res;
+    int res = -1;
 
     // wait for c->out_delayed[next] and move into c->out if visible
     Dav1dThreadPicture *out_delayed;
@@ -2861,7 +2861,8 @@
         default:
             fprintf(stderr, "Compiled without support for %d-bit decoding\n",
                     f->seq_hdr.bpc);
-            return -ENOPROTOOPT;
+            res = -ENOPROTOOPT;
+            goto error;
         }
     }
 
@@ -2885,8 +2886,10 @@
     if (f->frame_hdr.frame_type & 1) {
         if (f->frame_hdr.primary_ref_frame != PRIMARY_REF_NONE) {
             const int pri_ref = f->frame_hdr.refidx[f->frame_hdr.primary_ref_frame];
-            if (!c->refs[pri_ref].p.p.data[0])
-                return -EINVAL;
+            if (!c->refs[pri_ref].p.p.data[0]) {
+                res = -EINVAL;
+                goto error;
+            }
         }
         for (int i = 0; i < 7; i++) {
             const int refidx = f->frame_hdr.refidx[i];
@@ -2898,7 +2901,8 @@
             {
                 for (int j = 0; j < i; j++)
                     dav1d_thread_picture_unref(&f->refp[j]);
-                return -EINVAL;
+                res = -EINVAL;
+                goto error;
             }
             dav1d_thread_picture_ref(&f->refp[i], &c->refs[refidx].p);
         }
@@ -3097,5 +3101,5 @@
     for (int i = 0; i < f->n_tile_data; i++)
         dav1d_data_unref(&f->tile[i].data);
 
-    return -1;
+    return res;
 }