patch 8.2.2793: MS-Windows: string literals are writable with MSVC
Problem: MS-Windows: string literals are writable with MSVC.
Solution: Add the /GF compiler flag. Make mch_write() safer. (Ken Takata,
closes #8133)
diff --git a/src/os_win32.c b/src/os_win32.c
index 9b692ec..d40d033 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -6406,15 +6406,13 @@
char_u *s,
int len)
{
+ char_u *end = s + len;
+
# ifdef VIMDLL
if (gui.in_use)
return;
# endif
- // Avoid writing to a string literal.
- if (s[len] != NUL)
- s[len] = NUL;
-
if (!term_console)
{
write(1, s, (unsigned)len);
@@ -6435,10 +6433,13 @@
return;
}
- while ((ch = s[++prefix]))
+ while (s + ++prefix < end)
+ {
+ ch = s[prefix];
if (ch <= 0x1e && !(ch != '\n' && ch != '\r' && ch != '\b'
&& ch != '\a' && ch != '\033'))
break;
+ }
if (p_wd)
{