diff options
-rw-r--r-- | src/nvim/api/buffer.c | 5 | ||||
-rw-r--r-- | test/functional/api/buffer_spec.lua | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index 41d7d8ba6b..690497159a 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -453,6 +453,11 @@ void nvim_buf_set_lines(uint64_t channel_id, aco_save_T aco; aucmd_prepbuf(&aco, (buf_T *)buf); + if (!MODIFIABLE(buf)) { + api_set_error(err, kErrorTypeException, "Buffer is not 'modifiable'"); + goto end; + } + if (u_save((linenr_T)(start - 1), (linenr_T)end) == FAIL) { api_set_error(err, kErrorTypeException, "Failed to save undo information"); goto end; diff --git a/test/functional/api/buffer_spec.lua b/test/functional/api/buffer_spec.lua index 9d6cfb99ab..849fbedd01 100644 --- a/test/functional/api/buffer_spec.lua +++ b/test/functional/api/buffer_spec.lua @@ -14,6 +14,7 @@ local meth_pcall = helpers.meth_pcall local command = helpers.command local bufmeths = helpers.bufmeths local feed = helpers.feed +local expect_err = helpers.expect_err describe('api/buf', function() before_each(clear) @@ -197,6 +198,12 @@ describe('api/buf', function() eq(': ' .. exp_emsg, emsg:sub(-#exp_emsg - 2)) end) + it("fails if 'nomodifiable'", function() + command('set nomodifiable') + expect_err([[Buffer is not 'modifiable']], + bufmeths.set_lines, 1, 1, 2, false, {'a','b'}) + end) + it('has correct line_count when inserting and deleting', function() eq(1, line_count()) set_lines(-1, -1, true, {'line'}) |