diff options
author | notomo <notomo.motono@gmail.com> | 2023-12-16 22:58:04 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-16 21:58:04 +0800 |
commit | c18f3cfcdb8fc5a39b7c898eea619e3de94096b4 (patch) | |
tree | bc94fe0afec9c744a628f6899b0a9cb0198dd006 /src/nvim/api/win_config.c | |
parent | 574519d9d68f7f28a868e95ef0d081cbae6ddec4 (diff) | |
download | rneovim-c18f3cfcdb8fc5a39b7c898eea619e3de94096b4.tar.gz rneovim-c18f3cfcdb8fc5a39b7c898eea619e3de94096b4.tar.bz2 rneovim-c18f3cfcdb8fc5a39b7c898eea619e3de94096b4.zip |
fix(api): crash after nvim_win_set_config title/footer validation error (#26606)
Diffstat (limited to 'src/nvim/api/win_config.c')
-rw-r--r-- | src/nvim/api/win_config.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/nvim/api/win_config.c b/src/nvim/api/win_config.c index 856fac5585..4ffe3478d7 100644 --- a/src/nvim/api/win_config.c +++ b/src/nvim/api/win_config.c @@ -431,18 +431,36 @@ static bool parse_float_bufpos(Array bufpos, lpos_T *out) static void parse_bordertext(Object bordertext, BorderTextType bordertext_type, FloatConfig *fconfig, Error *err) { + if (bordertext.type != kObjectTypeString && bordertext.type != kObjectTypeArray) { + api_set_error(err, kErrorTypeValidation, "title/footer must be string or array"); + return; + } + + if (bordertext.type == kObjectTypeArray && bordertext.data.array.size == 0) { + api_set_error(err, kErrorTypeValidation, "title/footer cannot be an empty array"); + return; + } + bool *is_present; VirtText *chunks; int *width; int default_hl_id; switch (bordertext_type) { case kBorderTextTitle: + if (fconfig->title) { + clear_virttext(&fconfig->title_chunks); + } + is_present = &fconfig->title; chunks = &fconfig->title_chunks; width = &fconfig->title_width; default_hl_id = syn_check_group(S_LEN("FloatTitle")); break; case kBorderTextFooter: + if (fconfig->footer) { + clear_virttext(&fconfig->footer_chunks); + } + is_present = &fconfig->footer; chunks = &fconfig->footer_chunks; width = &fconfig->footer_width; @@ -462,16 +480,6 @@ static void parse_bordertext(Object bordertext, BorderTextType bordertext_type, return; } - if (bordertext.type != kObjectTypeArray) { - api_set_error(err, kErrorTypeValidation, "title must be string or array"); - return; - } - - if (bordertext.data.array.size == 0) { - api_set_error(err, kErrorTypeValidation, "title cannot be an empty array"); - return; - } - *width = 0; *chunks = parse_virt_text(bordertext.data.array, err, width); @@ -774,10 +782,6 @@ static bool parse_float_config(Dict(float_config) *config, FloatConfig *fconfig, return false; } - if (fconfig->title) { - clear_virttext(&fconfig->title_chunks); - } - parse_bordertext(config->title, kBorderTextTitle, fconfig, err); if (ERROR_SET(err)) { return false; @@ -801,10 +805,6 @@ static bool parse_float_config(Dict(float_config) *config, FloatConfig *fconfig, return false; } - if (fconfig->footer) { - clear_virttext(&fconfig->footer_chunks); - } - parse_bordertext(config->footer, kBorderTextFooter, fconfig, err); if (ERROR_SET(err)) { return false; |