fix(bar): 修复 bar_cell_t text 字段可能为野指针 bug

This commit is contained in:
2026-06-09 10:28:35 +08:00
parent 8c145fb1b4
commit fa2f058032
3 changed files with 10 additions and 3 deletions

View File

@@ -33,6 +33,11 @@ static void bar_item_cleanup(zdwm_bar_item_t *item) {
if (destroy_state) destroy_state(item->state);
item->state = nullptr;
for (size_t i = 0; i < item->count; ++i) {
auto cell = &item->cells[i];
p_delete(&cell->text);
}
p_delete(&item->cells);
p_clear(item, 1);
}

View File

@@ -68,9 +68,11 @@ void bar_cell_set_text(zdwm_bar_item_t *item, size_t index, const char *text) {
if (index >= item->count) return;
auto cell = &item->cells[index];
if (cell->text == text || strcmp(cell->text, text) == 0) return;
if (cell->text && text && strcmp(cell->text, text) == 0) return;
cell->text = text;
p_delete(&cell->text);
cell->text = p_strdup_nullable(text);
cell->dirty = true;
item->dirty = true;

View File

@@ -14,7 +14,7 @@ typedef struct bar_x_region_t {
typedef struct bar_cell_t {
zdwm_icon_t icon;
const char *text;
char *text; /* 持有内存,避免野指针问题 */
const color_t *fg;
const color_t *bg;
bar_x_region_t region;