# HG changeset patch # User Bram Moolenaar # Date 1639660502 -3600 # Node ID 22896e358a906d8c9f07eacf543f870e4a1bdb31 # Parent c929ca14d8a9f29e4a0b2f34a236adcf87fd55a5 patch 8.2.3824: no ASAN support for MSVC Commit: https://github.com/vim/vim/commit/6df0f2759d12ec0bc999b2963ecea4387a2bc516 Author: Yegappan Lakshmanan Date: Thu Dec 16 13:06:10 2021 +0000 patch 8.2.3824: no ASAN support for MSVC Problem: No ASAN support for MSVC. Solution: Add ASAN support and fix a coupld of uncovered problems. (Yegappan Lakshmanan, closes #9357) diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -147,6 +147,8 @@ # # Static Code Analysis: ANALYZE=yes (works with VS2012 or later) # +# Address Sanitizer: ASAN=yes (works with VS2019 or later) +# # You can combine any of these interfaces # # Example: To build the non-debug, GUI version with Perl interface: @@ -662,6 +664,12 @@ CFLAGS = $(CFLAGS) -DHAVE_STDINT_H CFLAGS = $(CFLAGS) /analyze !endif +# Address Sanitizer (ASAN) generally available starting with VS2019 version +# 16.9 +!if ("$(ASAN)" == "yes") && ($(MSVC_MAJOR) >= 14) +CFLAGS = $(CFLAGS) /fsanitize=address +!endif + !ifdef NODEBUG VIM = vim ! if "$(OPTIMIZE)" == "SPACE" diff --git a/src/findfile.c b/src/findfile.c --- a/src/findfile.c +++ b/src/findfile.c @@ -2653,7 +2653,7 @@ simplify_filename(char_u *filename) p = filename; # ifdef BACKSLASH_IN_FILENAME - if (p[1] == ':') // skip "x:" + if (p[0] != NUL && p[1] == ':') // skip "x:" p += 2; # endif diff --git a/src/os_mswin.c b/src/os_mswin.c --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -389,6 +389,8 @@ mch_isFullName(char_u *fname) // Another way to check is to use mch_FullName() and see if the result is // the same as the name or mch_FullName() fails. However, this has quite a // bit of overhead, so let's not do that. + if (*fname == NUL) + return TRUE; return ((ASCII_ISALPHA(fname[0]) && fname[1] == ':' && (fname[2] == '/' || fname[2] == '\\')) || (fname[0] == fname[1] && (fname[0] == '/' || fname[0] == '\\'))); diff --git a/src/testdir/test_fnamemodify.vim b/src/testdir/test_fnamemodify.vim --- a/src/testdir/test_fnamemodify.vim +++ b/src/testdir/test_fnamemodify.vim @@ -93,6 +93,7 @@ func Test_fnamemodify_er() call assert_equal('b.c', fnamemodify('a.b.c.d.e', ':r:r:e:e:e')) call assert_equal('b.c', fnamemodify('a.b.c.d.e', ':r:r:e:e:e:e')) + call assert_equal('', fnamemodify('', ':p:t')) call assert_equal('', fnamemodify(test_null_string(), test_null_string())) endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3824, +/**/ 3823, /**/ 3822,