libbluray | branch: master | hpi1 <[email protected]> | Mon Aug 25 11:14:48 2014 +0300| [8d7b9b33290ecbcf9947a7bca345eb1d17861296] | committer: hpi1
Check for NULL Protect against (theoretical) NULL pointer dereference. None of the checks are triggered with current code, but might be in future. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=8d7b9b33290ecbcf9947a7bca345eb1d17861296 --- src/libbluray/decoders/graphics_controller.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/libbluray/decoders/graphics_controller.c b/src/libbluray/decoders/graphics_controller.c index 9474c9d..85acd23 100644 --- a/src/libbluray/decoders/graphics_controller.c +++ b/src/libbluray/decoders/graphics_controller.c @@ -1005,9 +1005,11 @@ static int _render_textst(GRAPHICS_CONTROLLER *p, uint32_t stc, GC_NAV_CMDS *cmd /* next dialog too far in future ? */ if (now < 1 || dialog[ii].start_pts >= now + 90000) { - cmds->wakeup_time = dialog[ii].start_pts / 2; GC_TRACE("_render_textst(): next event #%d in %"PRId64" seconds (pts %"PRId64")\n", ii, (dialog[ii].start_pts - now)/90000, dialog[ii].start_pts); + if (cmds) { + cmds->wakeup_time = dialog[ii].start_pts / 2; + } return 1; } @@ -1458,11 +1460,13 @@ static int _render_page(GRAPHICS_CONTROLLER *gc, /* do not trigger auto action before single-loop animations have been terminated */ if (gc->button_effect_running) { GC_TRACE(" auto-activate #%d not triggered (ANIMATING)\n", auto_activate_button->id); - } else { + } else if (cmds) { cmds->num_nav_cmds = auto_activate_button->num_nav_cmds; cmds->nav_cmds = auto_activate_button->nav_cmds; gc->auto_action_triggered = 1; + } else { + GC_ERROR("_render_page(): auto-activate ignored (missing result buffer)\n"); } } @@ -1565,9 +1569,13 @@ static int _user_input(GRAPHICS_CONTROLLER *gc, uint32_t key, GC_NAV_CMDS *cmds) case BD_VK_ENTER: activated_btn_id = cur_btn_id; - cmds->num_nav_cmds = button->num_nav_cmds; - cmds->nav_cmds = button->nav_cmds; - cmds->sound_id_ref = button->activated_sound_id_ref; + if (cmds) { + cmds->num_nav_cmds = button->num_nav_cmds; + cmds->nav_cmds = button->nav_cmds; + cmds->sound_id_ref = button->activated_sound_id_ref; + } else { + GC_ERROR("_user_input(): VD_VK_ENTER action ignored (missing result buffer)\n"); + } break; default:; } @@ -1575,7 +1583,7 @@ static int _user_input(GRAPHICS_CONTROLLER *gc, uint32_t key, GC_NAV_CMDS *cmds) if (new_btn_id != cur_btn_id) { BD_IG_BUTTON *new_button = _find_button_page(page, new_btn_id, NULL); - if (new_button) { + if (new_button && cmds) { cmds->sound_id_ref = new_button->selected_sound_id_ref; } } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
