diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-04-21 11:30:48 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-04-21 11:30:48 +0200 |
commit | d23f8bde5cd16b7752cc4a73da106673839ed824 (patch) | |
tree | affc4e5f941e4eed6805b84d5e0ade6349388c08 /src | |
parent | 9ce47ec0b65f81358febacbd9b808ac8ef7af85c (diff) | |
download | vim-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)
Diffstat (limited to 'src')
-rw-r--r-- | src/Make_mvc.mak | 2 | ||||
-rw-r--r-- | src/os_win32.c | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |