To: vim_dev@googlegroups.com Subject: Patch 7.4.013 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.013 Problem: File name buffer too small for utf-8. Solution: Use character count instead of byte count. (Ken Takata) Files: src/os_mswin.c *** ../vim-7.4.012/src/os_mswin.c 2013-08-30 16:44:15.000000000 +0200 --- src/os_mswin.c 2013-08-30 16:47:54.000000000 +0200 *************** *** 456,462 **** --- 456,469 ---- int mch_isFullName(char_u *fname) { + #ifdef FEAT_MBYTE + /* WinNT and later can use _MAX_PATH wide characters for a pathname, which + * means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is + * UTF-8. */ + char szName[_MAX_PATH * 3 + 1]; + #else char szName[_MAX_PATH + 1]; + #endif /* A name like "d:/foo" and "//server/share" is absolute */ if ((fname[0] && fname[1] == ':' && (fname[2] == '/' || fname[2] == '\\')) *************** *** 464,470 **** return TRUE; /* A name that can't be made absolute probably isn't absolute. */ ! if (mch_FullName(fname, szName, _MAX_PATH, FALSE) == FAIL) return FALSE; return pathcmp(fname, szName, -1) == 0; --- 471,477 ---- return TRUE; /* A name that can't be made absolute probably isn't absolute. */ ! if (mch_FullName(fname, szName, sizeof(szName) - 1, FALSE) == FAIL) return FALSE; return pathcmp(fname, szName, -1) == 0; *************** *** 498,507 **** int vim_stat(const char *name, struct stat *stp) { char buf[_MAX_PATH + 1]; char *p; ! vim_strncpy((char_u *)buf, (char_u *)name, _MAX_PATH); p = buf + strlen(buf); if (p > buf) mb_ptr_back(buf, p); --- 505,521 ---- int vim_stat(const char *name, struct stat *stp) { + #ifdef FEAT_MBYTE + /* WinNT and later can use _MAX_PATH wide characters for a pathname, which + * means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is + * UTF-8. */ + char buf[_MAX_PATH * 3 + 1]; + #else char buf[_MAX_PATH + 1]; + #endif char *p; ! vim_strncpy((char_u *)buf, (char_u *)name, sizeof(buf) - 1); p = buf + strlen(buf); if (p > buf) mb_ptr_back(buf, p); *** ../vim-7.4.012/src/version.c 2013-08-30 16:44:15.000000000 +0200 --- src/version.c 2013-08-30 16:47:36.000000000 +0200 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 13, /**/ -- hundred-and-one symptoms of being an internet addict: 143. You dream in pallettes of 216 websafe colors. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///