summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-04-21 11:30:48 +0200
committerBram Moolenaar <Bram@vim.org>2021-04-21 11:30:48 +0200
commitd23f8bde5cd16b7752cc4a73da106673839ed824 (patch)
treeaffc4e5f941e4eed6805b84d5e0ade6349388c08
parent9ce47ec0b65f81358febacbd9b808ac8ef7af85c (diff)
downloadvim-git-d23f8bde5cd16b7752cc4a73da106673839ed824.tar.gz
patch 8.2.2793: MS-Windows: string literals are writable with MSVCv8.2.2793
Problem: MS-Windows: string literals are writable with MSVC. Solution: Add the /GF compiler flag. Make mch_write() safer. (Ken Takata, closes #8133)
-rw-r--r--src/Make_mvc.mak2
-rw-r--r--src/os_win32.c11
-rw-r--r--src/version.c2
3 files changed, 9 insertions, 6 deletions
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index 257f7e033..0f5611a43 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -489,7 +489,7 @@ CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
#VIMRCLOC = somewhere
#VIMRUNTIMEDIR = somewhere
-CFLAGS = -c /W3 /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
+CFLAGS = -c /W3 /GF /nologo $(CVARS) -I. -Iproto -DHAVE_PATHDEF -DWIN32 \
$(CSCOPE_DEFS) $(TERM_DEFS) $(SOUND_DEFS) $(NETBEANS_DEFS) $(CHANNEL_DEFS) \
$(NBDEBUG_DEFS) $(XPM_DEFS) \
$(DEFINES) -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
diff --git a/src/os_win32.c b/src/os_win32.c
index 9b692ec0e..d40d0332c 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -6406,15 +6406,13 @@ mch_write(
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 @@ mch_write(
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)
{
diff --git a/src/version.c b/src/version.c
index 01ec9a1bf..07a1e044f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2793,
+/**/
2792,
/**/
2791,