From 78d52883e10d71f23ab72a3d8b9733b00da8c9ad Mon Sep 17 00:00:00 2001
From: Bram Moolenaar <Bram@vim.org>
Date: Tue, 24 May 2022 13:57:54 +0100
Subject: [PATCH] patch 8.2.5013: after text formatting cursor may be in an
 invalid position

Problem:    After text formatting the cursor may be in an invalid position.
Solution:   Correct the cursor position after formatting.

Reference:https://github.com/vim/vim/commit/78d52883e10d71f23ab72a3d8b9733b00da8c9ad
Conflict: delete src/version.c and change src/ops.c file 

---
 src/ops.c                       |  3 +++
 src/testdir/test_textformat.vim | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/src/ops.c b/src/ops.c
index a79ef92..2a64db0 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -2296,6 +2296,9 @@ op_format(
     {
 	curwin->w_cursor = saved_cursor;
 	saved_cursor.lnum = 0;
+
+	// formatting may have made the cursor position invalid
+	check_cursor();
     }
 
     if (oap->is_VIsual)
diff --git a/src/testdir/test_textformat.vim b/src/testdir/test_textformat.vim
index 3a0552b..5e1d335 100644
--- a/src/testdir/test_textformat.vim
+++ b/src/testdir/test_textformat.vim
@@ -509,3 +509,15 @@ func Test_crash_github_issue_5095()
   augroup END
   augroup! testing
 endfunc
+
+" This was leaving the cursor after the end of a line.  Complicated way to
+" have the problem show up with valgrind.
+func Test_correct_cursor_position()
+  set encoding=iso8859
+  new
+  norm a0000
+  sil! norm gggg0i0gw0gg
+
+  bwipe!
+  set encoding=utf8
+endfunc
-- 
2.27.0

