From aafa32aaebd46fa6fd36d57dfeb7d9f8adc97c4e Mon Sep 17 00:00:00 2001 From: _VIFEXTech <1290176185@qq.com> Date: Mon, 11 Jul 2022 20:19:15 +0800 Subject: [PATCH] fix(bar): fix division by 0 (#3463) Co-authored-by: pengyiqiang --- src/widgets/lv_bar.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/widgets/lv_bar.c b/src/widgets/lv_bar.c index 0da2a9875..e7033ef05 100644 --- a/src/widgets/lv_bar.c +++ b/src/widgets/lv_bar.c @@ -124,6 +124,11 @@ void lv_bar_set_range(lv_obj_t * obj, int32_t min, int32_t max) lv_bar_t * bar = (lv_bar_t *)obj; + if(max < min) { + LV_LOG_WARN("error range: min = %" LV_PRId32 ", max = %" LV_PRId32, min, max); + return; + } + if(bar->min_value == min && bar->max_value == max) return; bar->max_value = max; @@ -259,6 +264,12 @@ static void draw_indic(lv_event_t * e) lv_coord_t barw = lv_area_get_width(&bar_coords); lv_coord_t barh = lv_area_get_height(&bar_coords); int32_t range = bar->max_value - bar->min_value; + + /*Prevent division by 0*/ + if(range == 0) { + range = 1; + } + bool hor = barw >= barh ? true : false; bool sym = false; if(bar->mode == LV_BAR_MODE_SYMMETRICAL && bar->min_value < 0 && bar->max_value > 0 &&