patch 9.0.2140: [security]: use-after-free in win-enter

Problem:  [security]: use-after-free in win-enter
Solution: validate window pointer before calling win_enter()

win_goto() may stop visual mode, if it is active. However, this may in
turn trigger the ModeChanged autocommand, which could potentially free
the wp pointer which was valid before now became stale and points to now
freed memory.

So before calling win_enter(), let's verify one more time, that the
wp pointer still points to a valid window structure.

Reported by @henices, thanks!

Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_crash.vim b/src/testdir/test_crash.vim
index b093b05..11c5f4e 100644
--- a/src/testdir/test_crash.vim
+++ b/src/testdir/test_crash.vim
@@ -128,6 +128,13 @@
     \ '  && echo "crash 1: [OK]" > '.. result .. "\<cr>")
   call TermWait(buf, 150)
 
+  let file = 'crash/poc_win_enter_ext'
+  let cmn_args = "%s -u NONE -i NONE -n -e -s -S %s -c ':qa!'"
+  let args = printf(cmn_args, vim, file)
+  call term_sendkeys(buf, args ..
+    \ '  && echo "crash 2: [OK]" >> '.. result .. "\<cr>")
+  call TermWait(buf, 350)
+
   " clean up
   exe buf .. "bw!"
 
@@ -135,6 +142,7 @@
 
   let expected = [
       \ 'crash 1: [OK]',
+      \ 'crash 2: [OK]',
       \ ]
 
   call assert_equal(expected, getline(1, '$'))