From 6663c61ddbd56beb5bb5ea17ec76b5361a7f1d2f Mon Sep 17 00:00:00 2001 From: giuliof Date: Wed, 24 Jan 2024 22:44:34 +0100 Subject: [PATCH] fix(video): memory overflow in cursor handling Avoided underflow in case of cursor position wrap --- src/video.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/video.c b/src/video.c index 34e8805..e0730b0 100644 --- a/src/video.c +++ b/src/video.c @@ -249,8 +249,13 @@ static void video_poll(void) { } // update cursor on screen - const unsigned int cursor_position = - crtc_cursorPosition() - crtc_startAddress(); + unsigned int cursor_position = crtc_cursorPosition(); + const unsigned int start_address = crtc_startAddress(); + // avoid underflows in case of cursor position wrap + cursor_position = cursor_position > start_address + ? cursor_position - start_address + : start_address - cursor_position; + const unsigned int row = cursor_position / VIDEO_COLUMNS; const unsigned int column = cursor_position % VIDEO_COLUMNS; unsigned int blink_period = 0; // [fields]