]> granicus.if.org Git - libvpx/commitdiff
Properly propagate out of memory errors.
authorJean-Yves Avenard <jyavenard@mozilla.com>
Sat, 11 Jul 2015 10:47:39 +0000 (20:47 +1000)
committerJohann <johannkoenig@google.com>
Mon, 28 Mar 2016 21:14:49 +0000 (14:14 -0700)
It would otherwise result in an infinite loop.

Change-Id: Ic03fb220cc048538bd62dee599653187f2093079

vp9/decoder/vp9_decoder.c

index f5da07ea02be60202825ffb924ae67258322e3cc..6c9c0f73a295a9959e4693b77e611cf092bc9fb1 100644 (file)
@@ -213,8 +213,11 @@ vpx_codec_err_t vp9_set_reference_dec(VP9_COMMON *cm,
 
     // Find an empty frame buffer.
     const int free_fb = get_free_fb(cm);
-    if (cm->new_fb_idx == INVALID_IDX)
-      return VPX_CODEC_MEM_ERROR;
+    if (cm->new_fb_idx == INVALID_IDX) {
+      vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
+                         "Unable to find free frame buffer");
+      return cm->error.error_code;
+    }
 
     // Decrease ref_count since it will be increased again in
     // ref_cnt_fb() below.
@@ -305,8 +308,11 @@ int vp9_receive_compressed_data(VP9Decoder *pbi,
                         &frame_bufs[cm->new_fb_idx].raw_frame_buffer);
   // Find a free frame buffer. Return error if can not find any.
   cm->new_fb_idx = get_free_fb(cm);
-  if (cm->new_fb_idx == INVALID_IDX)
-    return VPX_CODEC_MEM_ERROR;
+  if (cm->new_fb_idx == INVALID_IDX) {
+    vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
+                       "Unable to find free frame buffer");
+    return cm->error.error_code;
+  }
 
   // Assign a MV array to the frame buffer.
   cm->cur_frame = &pool->frame_bufs[cm->new_fb_idx];