diff --git a/src/draw/lv_draw_buf.c b/src/draw/lv_draw_buf.c index e2cc643c19..8e942dd3a4 100644 --- a/src/draw/lv_draw_buf.c +++ b/src/draw/lv_draw_buf.c @@ -379,6 +379,12 @@ void * lv_draw_buf_goto_xy(const lv_draw_buf_t * buf, uint32_t x, uint32_t y) LV_ASSERT_NULL(buf); if(buf == NULL) return NULL; + if(x >= buf->header.w || y >= buf->header.h) { + LV_LOG_ERROR("coordinates out of range, x: %" LV_PRIu32 ", y: %"LV_PRIu32", w: %"LV_PRIu32", h: %"LV_PRIu32, x, y, + (uint32_t)buf->header.w, (uint32_t)buf->header.h); + return NULL; + } + uint8_t * data = buf->data; /*Skip palette*/ diff --git a/tests/src/test_cases/test_draw_buf_stride.c b/tests/src/test_cases/test_draw_buf.c similarity index 90% rename from tests/src/test_cases/test_draw_buf_stride.c rename to tests/src/test_cases/test_draw_buf.c index d0e6186df7..cc4ff2aab8 100644 --- a/tests/src/test_cases/test_draw_buf_stride.c +++ b/tests/src/test_cases/test_draw_buf.c @@ -114,4 +114,17 @@ void test_draw_buf_stride_adjust(void) #endif } +void test_draw_buf_xy_access(void) +{ + LV_DRAW_BUF_DEFINE_STATIC(draw_buf, 100, 100, LV_COLOR_FORMAT_RGB565); + LV_DRAW_BUF_INIT_STATIC(draw_buf); + + uint8_t * ret = lv_draw_buf_goto_xy(&draw_buf, 50, 50); + TEST_ASSERT_NOT_NULL(ret); + ret = lv_draw_buf_goto_xy(&draw_buf, 100, 100); + TEST_ASSERT_NULL(ret); + ret = lv_draw_buf_goto_xy(&draw_buf, -10, -10); + TEST_ASSERT_NULL(ret); +} + #endif