mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
Added overflow check while calculating label height
This commit is contained in:
parent
320ee83dac
commit
68b93ea002
@ -22,6 +22,11 @@ extern "C" {
|
|||||||
#define LV_MATH_MAX(a, b) ((a) > (b) ? (a) : (b))
|
#define LV_MATH_MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||||
#define LV_MATH_ABS(x) ((x) > 0 ? (x) : (-(x)))
|
#define LV_MATH_ABS(x) ((x) > 0 ? (x) : (-(x)))
|
||||||
|
|
||||||
|
#define LV_IS_SIGNED(t) (((t)(-1)) < ((t) 0))
|
||||||
|
#define LV_UMAX_OF(t) (((0x1ULL << ((sizeof(t) * 8ULL) - 1ULL)) - 1ULL) | (0xFULL << ((sizeof(t) * 8ULL) - 4ULL)))
|
||||||
|
#define LV_SMAX_OF(t) (((0x1ULL << ((sizeof(t) * 8ULL) - 1ULL)) - 1ULL) | (0x7ULL << ((sizeof(t) * 8ULL) - 4ULL)))
|
||||||
|
#define LV_MAX_OF(t) ((unsigned long) (LV_IS_SIGNED(t) ? LV_SMAX_OF(t) : LV_UMAX_OF(t)))
|
||||||
|
|
||||||
#define LV_TRIGO_SIN_MAX 32767
|
#define LV_TRIGO_SIN_MAX 32767
|
||||||
#define LV_TRIGO_SHIFT 15 /**< >> LV_TRIGO_SHIFT to normalize*/
|
#define LV_TRIGO_SHIFT 15 /**< >> LV_TRIGO_SHIFT to normalize*/
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
*********************/
|
*********************/
|
||||||
#include "lv_txt.h"
|
#include "lv_txt.h"
|
||||||
#include "lv_math.h"
|
#include "lv_math.h"
|
||||||
|
#include "lv_log.h"
|
||||||
|
|
||||||
/*********************
|
/*********************
|
||||||
* DEFINES
|
* DEFINES
|
||||||
@ -108,8 +109,14 @@ void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t *
|
|||||||
/*Calc. the height and longest line*/
|
/*Calc. the height and longest line*/
|
||||||
while(text[line_start] != '\0') {
|
while(text[line_start] != '\0') {
|
||||||
new_line_start += lv_txt_get_next_line(&text[line_start], font, letter_space, max_width, flag);
|
new_line_start += lv_txt_get_next_line(&text[line_start], font, letter_space, max_width, flag);
|
||||||
|
|
||||||
|
if ((unsigned long)size_res->y + (unsigned long)letter_height + (unsigned long)line_space > LV_MAX_OF(lv_coord_t)) {
|
||||||
|
LV_LOG_WARN("lv_txt_get_size: integer overflow while calculating text height");
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
size_res->y += letter_height;
|
size_res->y += letter_height;
|
||||||
size_res->y += line_space;
|
size_res->y += line_space;
|
||||||
|
}
|
||||||
|
|
||||||
/*Calculate the the longest line*/
|
/*Calculate the the longest line*/
|
||||||
act_line_length = lv_txt_get_width(&text[line_start], new_line_start - line_start, font, letter_space, flag);
|
act_line_length = lv_txt_get_width(&text[line_start], new_line_start - line_start, font, letter_space, flag);
|
||||||
@ -118,7 +125,7 @@ void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_font_t *
|
|||||||
line_start = new_line_start;
|
line_start = new_line_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Ma ke the text one line taller if the last character is '\n' or '\r'*/
|
/*Make the text one line taller if the last character is '\n' or '\r'*/
|
||||||
if((line_start != 0) && (text[line_start - 1] == '\n' || text[line_start - 1] == '\r')) {
|
if((line_start != 0) && (text[line_start - 1] == '\n' || text[line_start - 1] == '\r')) {
|
||||||
size_res->y += letter_height + line_space;
|
size_res->y += letter_height + line_space;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user