From c2d2df67e9eab17c34d09ebf1449f0d1bad7f84f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Wed, 16 Jun 2021 10:52:41 +0200 Subject: [PATCH] refactor: handle correctly get and set pixel out of bounds --- image-viewer/src/display_utils.c | 8 ++++++++ image-viewer/src/image.c | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/image-viewer/src/display_utils.c b/image-viewer/src/display_utils.c index ff4e74e..5a05cb5 100644 --- a/image-viewer/src/display_utils.c +++ b/image-viewer/src/display_utils.c @@ -102,10 +102,18 @@ void display_clear(display_t *display, bool render) { } display_pixel_t display_get_pixel(display_t *display, uint16_t x, uint16_t y) { + if (y >= DISPLAY_HEIGHT || x >= DISPLAY_WIDTH) { + return BLACK_PIXEL; + } + return display->pixels[y * DISPLAY_WIDTH + x]; } void display_set_pixel(display_t *display, uint16_t x, uint16_t y, display_pixel_t pixel) { + if (y >= DISPLAY_HEIGHT || x >= DISPLAY_WIDTH) { + return; + } + display->pixels[y * DISPLAY_WIDTH + x] = pixel; } diff --git a/image-viewer/src/image.c b/image-viewer/src/image.c index a36a8f8..902199e 100644 --- a/image-viewer/src/image.c +++ b/image-viewer/src/image.c @@ -59,11 +59,18 @@ bool image_region_move_within(image_region_t *to_move, direction_t direction, } display_pixel_t image_get_pixel(image_t *image, uint16_t x, uint16_t y) { + if (y >= image->height || x >= image->width) { + return BLACK_PIXEL; + } return image->pixels[y * image->width + x]; } void image_set_pixel(image_t *image, uint16_t x, uint16_t y, display_pixel_t pixel) { + if (y >= image->height || x >= image->width) { + return; + } + image->pixels[y * image->width + x] = pixel; } -- 2.48.1