patch 9.1.0313: Crash when using heredoc with comment in command block

Problem:  Crash when using heredoc with comment in command block.
Solution: Handle a newline more like the end of the line, fix coverity
          warning (zeertzjq).

closes: #14535

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/test_let.vim b/src/testdir/test_let.vim
index e6d9cae..974e8f1 100644
--- a/src/testdir/test_let.vim
+++ b/src/testdir/test_let.vim
@@ -536,6 +536,13 @@
   XX
   call assert_equal(['Line1'], var1)
 
+  let var1 =<< trim XX " comment
+    Line1
+      Line2
+    Line3
+  XX
+  call assert_equal(['Line1', '  Line2', 'Line3'], var1)
+
   " ignore "endfunc"
   let var1 =<< END
 something
@@ -716,15 +723,27 @@
   call v9.CheckScriptFailure(lines, 'E15:')
 
   " Test for using heredoc in a single string using execute()
-  call assert_equal(["['one', 'two']"],
-    \ execute("let x =<< trim END\n  one\n  two\nEND\necho x")->split("\n"))
-  call assert_equal(["['  one', '  two']"],
-    \ execute("let x =<< END\n  one\n  two\nEND\necho x")->split("\n"))
+  call assert_equal("\n['one', 'two']",
+    \ execute("let x =<< trim END\n  one\n  two\nEND\necho x"))
+  call assert_equal("\n['one', '  two']",
+    \ execute("let x =<< trim END\n  one\n    two\nEND\necho x"))
+  call assert_equal("\n['one', 'two']",
+    \ execute("  let x =<< trim END\n    one\n    two\n  END\necho x"))
+  call assert_equal("\n['one', '  two']",
+    \ execute("  let x =<< trim END\n    one\n      two\n  END\necho x"))
+  call assert_equal("\n['  one', '  two']",
+    \ execute("let x =<< END\n  one\n  two\nEND\necho x"))
+  call assert_equal("\n['one', 'two']",
+    \ execute("let x =<< END\none\ntwo\nEND\necho x"))
+  call assert_equal("\n['one', 'two']",
+    \ execute("let x =<< END \" comment\none\ntwo\nEND\necho x"))
   let cmd = 'execute("let x =<< END\n  one\n  two\necho x")'
   call assert_fails(cmd, "E990: Missing end marker 'END'")
   let cmd = 'execute("let x =<<\n  one\n  two\necho x")'
-  call assert_fails(cmd, "E990: Missing end marker ''")
+  call assert_fails(cmd, "E172: Missing marker")
   let cmd = 'execute("let x =<< trim\n  one\n  two\necho x")'
+  call assert_fails(cmd, "E172: Missing marker")
+  let cmd = 'execute("let x =<< end\n  one\n  two\nend\necho x")'
   call assert_fails(cmd, "E221: Marker cannot start with lower case letter")
   let cmd = 'execute("let x =<< eval END\n  one\n  two{y}\nEND\necho x")'
   call assert_fails(cmd, 'E121: Undefined variable: y')
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 136c81d..a3f21be 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -508,6 +508,22 @@
   CODE
   v9.CheckSourceSuccess(lines)
 
+  # Heredoc with comment
+  lines =<< trim CODE
+    vim9script
+    com SomeCommand {
+        g:someVar =<< trim END # comment
+          aaa
+          bbb
+        END
+      }
+    execute('SomeCommand')
+    assert_equal(['aaa', 'bbb'], g:someVar)
+    delcommand SomeCommand
+    unlet g:someVar
+  CODE
+  v9.CheckSourceSuccess(lines)
+
   # heredoc evaluation
   lines =<< trim CODE
     vim9script