diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/ops.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 6c15d9a555..2491621fbc 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -5248,14 +5248,21 @@ static void str_to_reg(yankreg_T *y_ptr, MotionType yank_type, const char *str, start < end + extraline; start += line_len + 1, lnum++) { int charlen = 0; - const char *line_end; - for (line_end = start; line_end < end; line_end++) { + + const char *line_end = start; + while (line_end < end) { // find the end of the line if (*line_end == '\n') { break; } if (yank_type == kMTBlockWise) { charlen += utf_ptr2cells_len(line_end, (int)(end - line_end)); } + + if (*line_end == NUL) { + line_end++; // registers can have NUL chars + } else { + line_end += utf_ptr2len_len(line_end, (int)(end - line_end)); + } } assert(line_end - start >= 0); line_len = (size_t)(line_end - start); |