diff --git a/7.3.034 b/7.3.034 new file mode 100644 index 0000000..c81890e --- /dev/null +++ b/7.3.034 @@ -0,0 +1,431 @@ +To: vim-dev@vim.org +Subject: Patch 7.3.034 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.034 +Problem: Win32: may be loading .dll from the wrong directory. +Solution: Go to the Vim executable directory when opening a library. +Files: src/gui_w32.c, src/if_lua.c, src/if_mzsch.c, src/if_perl.xs, + src/if_python.c, src/if_python3.c, src/if_ruby.c, src/mbyte.c, + src/os_mswin.c, src/os_win32.c, src/proto/os_win32.pro + + +*** ../vim-7.3.033/src/gui_w32.c 2010-08-15 21:57:25.000000000 +0200 +--- src/gui_w32.c 2010-10-22 21:49:27.000000000 +0200 +*************** +*** 1260,1266 **** + + /* try and load the user32.dll library and get the entry points for + * multi-monitor-support. */ +! if ((user32_lib = LoadLibrary("User32.dll")) != NULL) + { + pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib, + "MonitorFromWindow"); +--- 1260,1266 ---- + + /* try and load the user32.dll library and get the entry points for + * multi-monitor-support. */ +! if ((user32_lib = vimLoadLib("User32.dll")) != NULL) + { + pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib, + "MonitorFromWindow"); +*************** +*** 4188,4194 **** + static void + dyn_imm_load(void) + { +! hLibImm = LoadLibrary("imm32.dll"); + if (hLibImm == NULL) + return; + +--- 4188,4194 ---- + static void + dyn_imm_load(void) + { +! hLibImm = vimLoadLib("imm32.dll"); + if (hLibImm == NULL) + return; + +*** ../vim-7.3.033/src/if_lua.c 2010-08-15 21:57:28.000000000 +0200 +--- src/if_lua.c 2010-10-22 21:49:39.000000000 +0200 +*************** +*** 49,55 **** + # define symbol_from_dll dlsym + # define close_dll dlclose + #else +! # define load_dll LoadLibrary + # define symbol_from_dll GetProcAddress + # define close_dll FreeLibrary + #endif +--- 49,55 ---- + # define symbol_from_dll dlsym + # define close_dll dlclose + #else +! # define load_dll vimLoadLib + # define symbol_from_dll GetProcAddress + # define close_dll FreeLibrary + #endif +*** ../vim-7.3.033/src/if_mzsch.c 2010-08-15 21:57:32.000000000 +0200 +--- src/if_mzsch.c 2010-10-22 21:49:53.000000000 +0200 +*************** +*** 556,563 **** + + if (hMzGC && hMzSch) + return OK; +! hMzSch = LoadLibrary(sch_dll); +! hMzGC = LoadLibrary(gc_dll); + + if (!hMzSch) + { +--- 556,563 ---- + + if (hMzGC && hMzSch) + return OK; +! hMzSch = vimLoadLib(sch_dll); +! hMzGC = vimLoadLib(gc_dll); + + if (!hMzSch) + { +*** ../vim-7.3.033/src/if_perl.xs 2010-08-15 21:57:30.000000000 +0200 +--- src/if_perl.xs 2010-10-22 21:53:06.000000000 +0200 +*************** +*** 106,112 **** + #define close_dll dlclose + #else + #define PERL_PROC FARPROC +! #define load_dll LoadLibrary + #define symbol_from_dll GetProcAddress + #define close_dll FreeLibrary + #endif +--- 106,112 ---- + #define close_dll dlclose + #else + #define PERL_PROC FARPROC +! #define load_dll vimLoadLib + #define symbol_from_dll GetProcAddress + #define close_dll FreeLibrary + #endif +*** ../vim-7.3.033/src/if_python.c 2010-08-15 21:57:28.000000000 +0200 +--- src/if_python.c 2010-10-22 21:49:57.000000000 +0200 +*************** +*** 110,116 **** + # define close_dll dlclose + # define symbol_from_dll dlsym + # else +! # define load_dll LoadLibrary + # define close_dll FreeLibrary + # define symbol_from_dll GetProcAddress + # endif +--- 110,116 ---- + # define close_dll dlclose + # define symbol_from_dll dlsym + # else +! # define load_dll vimLoadLib + # define close_dll FreeLibrary + # define symbol_from_dll GetProcAddress + # endif +*** ../vim-7.3.033/src/if_python3.c 2010-08-15 21:57:28.000000000 +0200 +--- src/if_python3.c 2010-10-22 21:50:01.000000000 +0200 +*************** +*** 88,94 **** + # define close_dll dlclose + # define symbol_from_dll dlsym + # else +! # define load_dll LoadLibrary + # define close_dll FreeLibrary + # define symbol_from_dll GetProcAddress + # endif +--- 88,94 ---- + # define close_dll dlclose + # define symbol_from_dll dlsym + # else +! # define load_dll vimLoadLib + # define close_dll FreeLibrary + # define symbol_from_dll GetProcAddress + # endif +*** ../vim-7.3.033/src/if_ruby.c 2010-09-29 13:02:48.000000000 +0200 +--- src/if_ruby.c 2010-10-22 21:50:04.000000000 +0200 +*************** +*** 55,61 **** + # define symbol_from_dll dlsym + # define close_dll dlclose + #else +! # define load_dll LoadLibrary + # define symbol_from_dll GetProcAddress + # define close_dll FreeLibrary + #endif +--- 55,61 ---- + # define symbol_from_dll dlsym + # define close_dll dlclose + #else +! # define load_dll vimLoadLib + # define symbol_from_dll GetProcAddress + # define close_dll FreeLibrary + #endif +*** ../vim-7.3.033/src/mbyte.c 2010-09-18 13:36:41.000000000 +0200 +--- src/mbyte.c 2010-10-22 21:50:09.000000000 +0200 +*************** +*** 4159,4169 **** + { + if (hIconvDLL != 0 && hMsvcrtDLL != 0) + return TRUE; +! hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL); + if (hIconvDLL == 0) /* sometimes it's called libiconv.dll */ +! hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL_ALT); + if (hIconvDLL != 0) +! hMsvcrtDLL = LoadLibrary(DYNAMIC_MSVCRT_DLL); + if (hIconvDLL == 0 || hMsvcrtDLL == 0) + { + /* Only give the message when 'verbose' is set, otherwise it might be +--- 4159,4169 ---- + { + if (hIconvDLL != 0 && hMsvcrtDLL != 0) + return TRUE; +! hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL); + if (hIconvDLL == 0) /* sometimes it's called libiconv.dll */ +! hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT); + if (hIconvDLL != 0) +! hMsvcrtDLL = vimLoadLib(DYNAMIC_MSVCRT_DLL); + if (hIconvDLL == 0 || hMsvcrtDLL == 0) + { + /* Only give the message when 'verbose' is set, otherwise it might be +*** ../vim-7.3.033/src/os_mswin.c 2010-08-15 21:57:29.000000000 +0200 +--- src/os_mswin.c 2010-10-22 22:03:26.000000000 +0200 +*************** +*** 817,823 **** +--- 817,827 ---- + BOOL fRunTimeLinkSuccess = FALSE; + + // Get a handle to the DLL module. ++ # ifdef WIN16 + hinstLib = LoadLibrary(libname); ++ # else ++ hinstLib = vimLoadLib(libname); ++ # endif + + // If the handle is valid, try to get the function address. + if (hinstLib != NULL) +*** ../vim-7.3.033/src/os_win32.c 2010-10-13 20:37:37.000000000 +0200 +--- src/os_win32.c 2010-10-23 13:16:55.000000000 +0200 +*************** +*** 206,247 **** + static int suppress_winsize = 1; /* don't fiddle with console */ + #endif + + static void + get_exe_name(void) + { +! char temp[256]; +! static int did_set_PATH = FALSE; + + if (exe_name == NULL) + { + /* store the name of the executable, may be used for $VIM */ +! GetModuleFileName(NULL, temp, 255); + if (*temp != NUL) + exe_name = FullName_save((char_u *)temp, FALSE); + } + +! if (!did_set_PATH && exe_name != NULL) + { +! char_u *p; +! char_u *newpath; +! +! /* Append our starting directory to $PATH, so that when doing "!xxd" +! * it's found in our starting directory. Needed because SearchPath() +! * also looks there. */ +! p = mch_getenv("PATH"); +! newpath = alloc((unsigned)(STRLEN(p) + STRLEN(exe_name) + 2)); +! if (newpath != NULL) +! { +! STRCPY(newpath, p); +! STRCAT(newpath, ";"); +! vim_strncpy(newpath + STRLEN(newpath), exe_name, +! gettail_sep(exe_name) - exe_name); +! vim_setenv((char_u *)"PATH", newpath); +! vim_free(newpath); + } + +! did_set_PATH = TRUE; + } + } + + #if defined(DYNAMIC_GETTEXT) || defined(PROTO) +--- 206,268 ---- + static int suppress_winsize = 1; /* don't fiddle with console */ + #endif + ++ static char_u *exe_path = NULL; ++ + static void + get_exe_name(void) + { +! char temp[MAXPATHL]; +! char_u *p; + + if (exe_name == NULL) + { + /* store the name of the executable, may be used for $VIM */ +! GetModuleFileName(NULL, temp, MAXPATHL - 1); + if (*temp != NUL) + exe_name = FullName_save((char_u *)temp, FALSE); + } + +! if (exe_path == NULL && exe_name != NULL) + { +! exe_path = vim_strnsave(exe_name, gettail_sep(exe_name) - exe_name); +! if (exe_path != NULL) +! { +! /* Append our starting directory to $PATH, so that when doing +! * "!xxd" it's found in our starting directory. Needed because +! * SearchPath() also looks there. */ +! p = mch_getenv("PATH"); +! if (STRLEN(p) + STRLEN(exe_path) + 2 < MAXPATHL); +! { +! STRCPY(temp, p); +! STRCAT(temp, ";"); +! STRCAT(temp, exe_path); +! vim_setenv((char_u *)"PATH", temp); +! } + } ++ } ++ } ++ ++ /* ++ * Load library "name". ++ */ ++ HINSTANCE ++ vimLoadLib(char *name) ++ { ++ HINSTANCE dll = NULL; ++ char old_dir[MAXPATHL]; + +! if (exe_path == NULL) +! get_exe_name(); +! if (exe_path != NULL && mch_dirname(old_dir, MAXPATHL) == OK) +! { +! /* Change directory to where the executable is, both to make sure we +! * find a .dll there and to avoid looking for a .dll in the current +! * directory. */ +! mch_chdir(exe_path); +! dll = LoadLibrary(name); +! mch_chdir(old_dir); + } ++ return dll; + } + + #if defined(DYNAMIC_GETTEXT) || defined(PROTO) +*************** +*** 254,260 **** + static char *null_libintl_bindtextdomain(const char *, const char *); + static char *null_libintl_bind_textdomain_codeset(const char *, const char *); + +! static HINSTANCE hLibintlDLL = 0; + char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext; + char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain; + char *(*dyn_libintl_bindtextdomain)(const char *, const char *) +--- 275,281 ---- + static char *null_libintl_bindtextdomain(const char *, const char *); + static char *null_libintl_bind_textdomain_codeset(const char *, const char *); + +! static HINSTANCE hLibintlDLL = NULL; + char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext; + char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain; + char *(*dyn_libintl_bindtextdomain)(const char *, const char *) +*************** +*** 282,307 **** + if (hLibintlDLL) + return 1; + /* Load gettext library (libintl.dll) */ +! hLibintlDLL = LoadLibrary(libname != NULL ? libname : GETTEXT_DLL); + if (!hLibintlDLL) + { +! char_u dirname[_MAX_PATH]; +! +! /* Try using the path from gvim.exe to find the .dll there. */ +! get_exe_name(); +! STRCPY(dirname, exe_name); +! STRCPY(gettail(dirname), GETTEXT_DLL); +! hLibintlDLL = LoadLibrary((char *)dirname); +! if (!hLibintlDLL) + { +! if (p_verbose > 0) +! { +! verbose_enter(); +! EMSG2(_(e_loadlib), GETTEXT_DLL); +! verbose_leave(); +! } +! return 0; + } + } + for (i = 0; libintl_entry[i].name != NULL + && libintl_entry[i].ptr != NULL; ++i) +--- 303,318 ---- + if (hLibintlDLL) + return 1; + /* Load gettext library (libintl.dll) */ +! hLibintlDLL = vimLoadLib(libname != NULL ? libname : GETTEXT_DLL); + if (!hLibintlDLL) + { +! if (p_verbose > 0) + { +! verbose_enter(); +! EMSG2(_(e_loadlib), GETTEXT_DLL); +! verbose_leave(); + } ++ return 0; + } + for (i = 0; libintl_entry[i].name != NULL + && libintl_entry[i].ptr != NULL; ++i) +*************** +*** 430,436 **** + * Seems like a lot of overhead to load/unload ADVAPI32.DLL each + * time we verify security... + */ +! advapi_lib = LoadLibrary("ADVAPI32.DLL"); + if (advapi_lib != NULL) + { + pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib, +--- 441,447 ---- + * Seems like a lot of overhead to load/unload ADVAPI32.DLL each + * time we verify security... + */ +! advapi_lib = vimLoadLib("ADVAPI32.DLL"); + if (advapi_lib != NULL) + { + pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib, +*** ../vim-7.3.033/src/proto/os_win32.pro 2010-08-15 21:57:28.000000000 +0200 +--- src/proto/os_win32.pro 2010-10-22 22:05:35.000000000 +0200 +*************** +*** 1,4 **** +--- 1,5 ---- + /* os_win32.c */ ++ HINSTANCE vimLoadLib __ARGS((char *name)); + int dyn_libintl_init __ARGS((char *libname)); + void dyn_libintl_end __ARGS((void)); + void PlatformId __ARGS((void)); +*** ../vim-7.3.033/src/version.c 2010-10-22 22:13:47.000000000 +0200 +--- src/version.c 2010-10-23 13:55:21.000000000 +0200 +*************** +*** 716,717 **** +--- 716,719 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 34, + /**/ + +-- +This is the polymorph virus! Follow these instructions carefully: +1. Send this message to everybody you know. +2. Format your harddisk. +Thank you for your cooperation in spreading the most powerful virus ever! + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///