fix(api): load buffer first on nvim_buf_set_lines (#25823)

Fix #22670
Fix #8659
This commit is contained in:
Raphael
2023-10-29 15:44:52 +08:00
committed by GitHub
parent 82b1a389ba
commit 0da27e9bde
2 changed files with 31 additions and 8 deletions

View File

@ -359,6 +359,14 @@ void nvim_buf_set_lines(uint64_t channel_id, Buffer buffer, Integer start, Integ
return;
}
// loaded buffer first if it's not loaded
if (buf->b_ml.ml_mfp == NULL) {
if (!buf_ensure_loaded(buf)) {
api_set_error(err, kErrorTypeException, "Failed to load buffer");
return;
}
}
bool oob = false;
start = normalize_index(buf, start, true, &oob);
end = normalize_index(buf, end, true, &oob);
@ -396,10 +404,6 @@ void nvim_buf_set_lines(uint64_t channel_id, Buffer buffer, Integer start, Integ
goto end;
}
if (!buf_ensure_loaded(buf)) {
goto end;
}
if (u_save_buf(buf, (linenr_T)(start - 1), (linenr_T)end) == FAIL) {
api_set_error(err, kErrorTypeException, "Failed to save undo information");
goto end;
@ -537,6 +541,14 @@ void nvim_buf_set_text(uint64_t channel_id, Buffer buffer, Integer start_row, In
return;
}
// loaded buffer first if it's not loaded
if (buf->b_ml.ml_mfp == NULL) {
if (!buf_ensure_loaded(buf)) {
api_set_error(err, kErrorTypeException, "Failed to load buffer");
return;
}
}
bool oob = false;
// check range is ordered and everything!
@ -645,10 +657,6 @@ void nvim_buf_set_text(uint64_t channel_id, Buffer buffer, Integer start_row, In
goto end;
}
if (!buf_ensure_loaded(buf)) {
goto end;
}
// Small note about undo states: unlike set_lines, we want to save the
// undo state of one past the end_row, since end_row is inclusive.
if (u_save_buf(buf, (linenr_T)start_row - 1, (linenr_T)end_row + 1) == FAIL) {