libbluray | branch: master | hpi1 <h...@anonymous.org> | Sat Jun 10 14:33:14 2017 +0300| [3be8ac1bec9b5b87b3b6440c33c68831bf636f36] | committer: hpi1
Fix allocs in graphics_controller > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=3be8ac1bec9b5b87b3b6440c33c68831bf636f36 --- src/libbluray/decoders/graphics_controller.c | 24 ++++++------------------ src/libbluray/decoders/ig.h | 2 ++ 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/libbluray/decoders/graphics_controller.c b/src/libbluray/decoders/graphics_controller.c index 8e8cf6ea..a53486bd 100644 --- a/src/libbluray/decoders/graphics_controller.c +++ b/src/libbluray/decoders/graphics_controller.c @@ -83,7 +83,7 @@ struct graphics_controller_s { unsigned popup_visible; unsigned valid_mouse_position; unsigned auto_action_triggered; - BOG_DATA *bog_data; + BOG_DATA bog_data[MAX_NUM_BOGS]; BOG_DATA *saved_bog_data; BD_UO_MASK page_uo_mask; @@ -359,10 +359,6 @@ static void _reset_user_timeout(GRAPHICS_CONTROLLER *gc) static int _save_page_state(GRAPHICS_CONTROLLER *gc) { - if (!gc->bog_data) { - GC_TRACE("_save_page_state(): no bog data !\n"); - return -1; - } if (!gc->igs || !gc->igs->ics) { GC_TRACE("_save_page_state(): no IG composition\n"); return -1; @@ -383,7 +379,7 @@ static int _save_page_state(GRAPHICS_CONTROLLER *gc) /* copy enabled button state, clear draw state */ X_FREE(gc->saved_bog_data); - gc->saved_bog_data = calloc(page->num_bogs, sizeof(*gc->saved_bog_data)); + gc->saved_bog_data = calloc(1, sizeof(gc->bog_data)); if (!gc->saved_bog_data) { GC_ERROR("_save_page_state(): out of memory\n"); return -1; @@ -403,13 +399,8 @@ static int _restore_page_state(GRAPHICS_CONTROLLER *gc) gc->out_effects = NULL; if (gc->saved_bog_data) { - if (gc->bog_data) { - GC_ERROR("_restore_page_state(): bog data already exists !\n"); - X_FREE(gc->bog_data); - } - gc->bog_data = gc->saved_bog_data; - gc->saved_bog_data = NULL; - + memcpy(gc->bog_data, gc->saved_bog_data, sizeof(gc->bog_data)); + X_FREE(gc->saved_bog_data); return 1; } return -1; @@ -429,10 +420,7 @@ static void _reset_page_state(GRAPHICS_CONTROLLER *gc) return; } - size_t size = page->num_bogs * sizeof(*gc->bog_data); - gc->bog_data = realloc(gc->bog_data, size); - - memset(gc->bog_data, 0, size); + memset(gc->bog_data, 0, sizeof(gc->bog_data)); for (ii = 0; ii < page->num_bogs; ii++) { gc->bog_data[ii].enabled_button = page->bog[ii].default_valid_button_id_ref; @@ -753,7 +741,7 @@ static void _gc_reset(GRAPHICS_CONTROLLER *gc) gc->next_dialog_idx = 0; gc->textst_user_style = -1; - X_FREE(gc->bog_data); + memset(gc->bog_data, 0, sizeof(gc->bog_data)); } /* diff --git a/src/libbluray/decoders/ig.h b/src/libbluray/decoders/ig.h index 789e59f9..1abcc647 100644 --- a/src/libbluray/decoders/ig.h +++ b/src/libbluray/decoders/ig.h @@ -94,6 +94,8 @@ typedef struct bd_ig_effect_sequence_s { } BD_IG_EFFECT_SEQUENCE; +#define MAX_NUM_BOGS 256 + typedef struct bd_ig_page_s { uint8_t id; uint8_t version; _______________________________________________ libbluray-devel mailing list libbluray-devel@videolan.org https://mailman.videolan.org/listinfo/libbluray-devel