diff src/os_win32.c @ 6345:9bc6ce142cc3 v7.4.505

updated for version 7.4.505 Problem: On MS-Windows when 'encoding' is a double-byte encoding a file name longer than MAX_PATH bytes but shorter than that in characters causes problems. Solution: Fail on file names longer than MAX_PATH bytes. (Ken Takata)
author Bram Moolenaar <bram@vim.org>
date Wed, 05 Nov 2014 18:36:03 +0100
parents e3149e2b4152
children 9f9058aeba0d
line wrap: on
line diff
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -6139,6 +6139,13 @@ mch_open(char *name, int flags, int mode
     }
 # endif
 
+    /* open() can open a file which name is longer than _MAX_PATH bytes
+     * and shorter than _MAX_PATH characters successfully, but sometimes it
+     * causes unexpected error in another part. We make it an error explicitly
+     * here. */
+    if (strlen(name) >= _MAX_PATH)
+	return -1;
+
     return open(name, flags, mode);
 }
 
@@ -6188,6 +6195,13 @@ mch_fopen(char *name, char *mode)
 	 * the _wfopen() fails for missing wide functions. */
     }
 
+    /* fopen() can open a file which name is longer than _MAX_PATH bytes
+     * and shorter than _MAX_PATH characters successfully, but sometimes it
+     * causes unexpected error in another part. We make it an error explicitly
+     * here. */
+    if (strlen(name) >= _MAX_PATH)
+	return NULL;
+
     return fopen(name, mode);
 }
 #endif