]> granicus.if.org Git - vim/commitdiff
patch 8.1.0297: MS-Windows: tests fail, Vim crashes v8.1.0297
authorBram Moolenaar <Bram@vim.org>
Sun, 19 Aug 2018 12:38:42 +0000 (14:38 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 19 Aug 2018 12:38:42 +0000 (14:38 +0200)
Problem:    MS-Windows: tests fail, Vim crashes.
Solution:   Fix long file name handling.

src/os_win32.c
src/version.c

index 8065ee858b78233c9a5aa3ed9708cf35ff1a75c5..dc98d6acd24aeec776d9b046da9878b5504568d0 100644 (file)
@@ -3109,6 +3109,7 @@ mch_dirname(
     int                len)
 {
     char_u  abuf[_MAX_PATH + 1];
+    DWORD   lfnlen;
 
     /*
      * Originally this was:
@@ -3124,11 +3125,19 @@ mch_dirname(
        if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
        {
            WCHAR   wcbuf[_MAX_PATH + 1];
-           char_u  *p;
+           char_u  *p = NULL;
 
            if (GetLongPathNameW(wbuf, wcbuf, _MAX_PATH) != 0)
+           {
                p = utf16_to_enc(wcbuf, NULL);
-           else
+               if (STRLEN(p) >= (size_t)len)
+               {
+                   // long path name is too long, fall back to short one
+                   vim_free(p);
+                   p = NULL;
+               }
+           }
+           if (p == NULL)
                p = utf16_to_enc(wbuf, NULL);
 
            if (p != NULL)
@@ -3143,11 +3152,13 @@ mch_dirname(
 #endif
     if (GetCurrentDirectory(len, (LPSTR)buf) == 0)
        return FAIL;
-    if (GetLongPathNameA((LPSTR)buf, (LPSTR)abuf, _MAX_PATH) == 0)
-       // return the short path name
+    lfnlen = GetLongPathNameA((LPCSTR)buf, (LPSTR)abuf, _MAX_PATH);
+    if (lfnlen == 0 || lfnlen >= (DWORD)len)
+       // Failed to get long path name or it's too long: fall back to the
+       // short path name.
        return OK;
 
-    vim_strncpy(abuf, buf, len - 1);
+    STRCPY(buf, abuf);
     return OK;
 }
 
index 194ee4cda7576e81329caec707651e5237f54f60..99f86e70c808967beb239dba5dc015b8e74bd63c 100644 (file)
@@ -794,6 +794,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    297,
 /**/
     296,
 /**/