fix(statusline): don't leak memory with zero-width click labels

A zero-width click label isn't assigned to any click definition, so its
function name should be freed when filling click definitions.
This commit is contained in:
zeertzjq
2023-01-18 15:12:45 +08:00
parent 45dc0f3454
commit 295a264b65
2 changed files with 22 additions and 4 deletions

View File

@@ -231,8 +231,12 @@ void stl_fill_click_defs(StlClickDefinition *click_defs, StlClickRecord *click_r
};
for (int i = 0; click_recs[i].start != NULL; i++) {
len += vim_strnsize(buf, (int)(click_recs[i].start - buf));
while (col < len) {
click_defs[col++] = cur_click_def;
if (col < len) {
while (col < len) {
click_defs[col++] = cur_click_def;
}
} else {
xfree(cur_click_def.func);
}
buf = (char *)click_recs[i].start;
cur_click_def = click_recs[i].def;
@@ -242,8 +246,12 @@ void stl_fill_click_defs(StlClickDefinition *click_defs, StlClickRecord *click_r
cur_click_def.type = kStlClickDisabled;
}
}
while (col < width) {
click_defs[col++] = cur_click_def;
if (col < width) {
while (col < width) {
click_defs[col++] = cur_click_def;
}
} else {
xfree(cur_click_def.func);
}
}