[libbluray-devel] rle_begin(): check for errors

hpi1 git at videolan.org
Sun Aug 7 18:27:26 CEST 2016


libbluray | branch: master | hpi1 <hpi1 at anonymous.org> | Sun Aug  7 17:17:16 2016 +0300| [749382d001de438b426f8bad43823fe90838ca5d] | committer: hpi1

rle_begin(): check for errors

> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=749382d001de438b426f8bad43823fe90838ca5d
---

 src/libbluray/decoders/graphics_controller.c |  4 +++-
 src/libbluray/decoders/rle.c                 |  4 +++-
 src/libbluray/decoders/rle.h                 | 11 ++++++++---
 3 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/libbluray/decoders/graphics_controller.c b/src/libbluray/decoders/graphics_controller.c
index 98f3239..c801f80 100644
--- a/src/libbluray/decoders/graphics_controller.c
+++ b/src/libbluray/decoders/graphics_controller.c
@@ -971,7 +971,9 @@ static int _render_textst_region(GRAPHICS_CONTROLLER *p, int64_t pts, BD_TEXTST_
     uint16_t y;
     RLE_ENC  rle;
 
-    rle_begin(&rle);
+    if (!rle_begin(&rle)) {
+        return -1;
+    }
 
     for (y = 0, bmp_y = 0; y < style->region_info.region.height; y++) {
         if (y < style->text_box.ypos || y >= style->text_box.ypos + style->text_box.height) {
diff --git a/src/libbluray/decoders/rle.c b/src/libbluray/decoders/rle.c
index 22183f8..4420542 100644
--- a/src/libbluray/decoders/rle.c
+++ b/src/libbluray/decoders/rle.c
@@ -69,7 +69,9 @@ BD_PG_RLE_ELEM *rle_crop_object(const BD_PG_RLE_ELEM *orig, int width,
     int      x1 = crop_x + crop_w; /* first pixel outside of cropped region */
     int      x, y;
 
-    rle_begin(&rle);
+    if (!rle_begin(&rle)) {
+        return NULL;
+    }
 
     /* skip crop_y */
     for (y = 0; y < crop_y; y++) {
diff --git a/src/libbluray/decoders/rle.h b/src/libbluray/decoders/rle.h
index a8e121e..1cd70e0 100644
--- a/src/libbluray/decoders/rle.h
+++ b/src/libbluray/decoders/rle.h
@@ -46,14 +46,17 @@ typedef struct {
 BD_PRIVATE BD_PG_RLE_ELEM *rle_crop_object(const BD_PG_RLE_ELEM *orig, int width,
                                            int crop_x, int crop_y, int crop_w, int crop_h);
 
-static inline void rle_begin(RLE_ENC *p)
+static inline int rle_begin(RLE_ENC *p)
 {
     p->num_elem = 1024;
     p->free_elem = 1024;
     p->elem = refcnt_realloc(NULL, p->num_elem * sizeof(BD_PG_RLE_ELEM));
-
+    if (!p->elem) {
+        return 0;
+    }
     p->elem->len = 0;
     p->elem->color = 0xffff;
+    return 1;
 }
 
 static inline BD_PG_RLE_ELEM *rle_get(RLE_ENC *p)
@@ -65,7 +68,9 @@ static inline BD_PG_RLE_ELEM *rle_get(RLE_ENC *p)
 static inline void rle_end(RLE_ENC *p)
 {
     BD_PG_RLE_ELEM *start = rle_get(p);
-    bd_refcnt_dec(start);
+    if (start) {
+        bd_refcnt_dec(start);
+    }
     p->elem = NULL;
 }
 



More information about the libbluray-devel mailing list