From c4daa087d413afa38e141070a4344e4f03ff623c Mon Sep 17 00:00:00 2001 From: aliaspider Date: Tue, 4 Oct 2016 15:49:55 +0100 Subject: [PATCH 1/2] (3DS) video driver: add some checks for the validty of incoming data. --- gfx/drivers/ctr_gfx.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index 641f156345..c6d9239e20 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -200,6 +200,7 @@ static void ctr_update_viewport(ctr_video_t* ctr) static void ctr_lcd_aptHook(APT_HookType hook, void* param) { ctr_video_t *ctr = (ctr_video_t*)param; + if(!ctr) return; @@ -854,19 +855,21 @@ static void ctr_set_texture_frame(void* data, const void* frame, bool rgb32, { int i; ctr_video_t* ctr = (ctr_video_t*)data; - uint16_t* dst = (uint16_t*)ctr->menu.texture_linear; - const uint16_t* src = frame; int line_width = width; - (void)rgb32; (void)alpha; + if(!ctr || !frame) + return; + if (line_width > ctr->menu.texture_width) line_width = ctr->menu.texture_width; if (height > (unsigned)ctr->menu.texture_height) height = (unsigned)ctr->menu.texture_height; + const uint16_t* src = frame; + uint16_t* dst = (uint16_t*)ctr->menu.texture_linear; for (i = 0; i < height; i++) { memcpy(dst, src, line_width * sizeof(uint16_t)); @@ -918,6 +921,9 @@ static void ctr_set_aspect_ratio(void* data, unsigned aspect_ratio_idx) { ctr_video_t *ctr = (ctr_video_t*)data; + if(!ctr) + return; + switch (aspect_ratio_idx) { case ASPECT_RATIO_SQUARE: @@ -965,6 +971,9 @@ static uintptr_t ctr_load_texture(void *video_data, void *data, ctr_video_t* ctr = (ctr_video_t*)video_data; struct texture_image *image = (struct texture_image*)data; + if(!ctr || !image) + return; + ctr_texture_t* texture = calloc(1, sizeof(ctr_texture_t)); uint32_t texsize = image->width * image->height * sizeof(uint32_t); void* tmpdata; @@ -976,7 +985,7 @@ static uintptr_t ctr_load_texture(void *video_data, void *data, texture->height = image->height; - if ((!texture->data)) + if (!texture->data) { free(texture); return 0; @@ -1019,6 +1028,7 @@ static uintptr_t ctr_load_texture(void *video_data, void *data, static void ctr_unload_texture(void *data, uintptr_t handle) { struct ctr_texture *texture = (struct ctr_texture*)handle; + if (!texture) return; @@ -1037,7 +1047,7 @@ static void ctr_set_osd_msg(void *data, const char *msg, { ctr_video_t* ctr = (ctr_video_t*)data; - if (ctr->msg_rendering_enabled) + if (ctr && ctr->msg_rendering_enabled) font_driver_render_msg(font, msg, params); } From 23eef2c6ee00f4ad92cecc8c5fb5d7f3054b41d5 Mon Sep 17 00:00:00 2001 From: aliaspider Date: Tue, 4 Oct 2016 15:55:30 +0100 Subject: [PATCH 2/2] (3DS) video driver: (cont.) --- gfx/drivers/ctr_gfx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index c6d9239e20..d9e6cfe5a7 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -921,9 +921,6 @@ static void ctr_set_aspect_ratio(void* data, unsigned aspect_ratio_idx) { ctr_video_t *ctr = (ctr_video_t*)data; - if(!ctr) - return; - switch (aspect_ratio_idx) { case ASPECT_RATIO_SQUARE: @@ -944,6 +941,9 @@ static void ctr_set_aspect_ratio(void* data, unsigned aspect_ratio_idx) video_driver_set_aspect_ratio_value(aspectratio_lut[aspect_ratio_idx].value); + if(!ctr) + return; + ctr->keep_aspect = true; ctr->should_resize = true; }