]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.2.0595: MS-Windows: Wrong buffer size calculation for gvimext v9.2.0595
authorK.Takata <kentkt@csc.jp>
Thu, 4 Jun 2026 19:40:30 +0000 (19:40 +0000)
committerChristian Brabandt <cb@256bit.org>
Thu, 4 Jun 2026 19:40:30 +0000 (19:40 +0000)
Problem:  MS-Windows: Wrong buffer size calculation for gvimext
          (after 7e6d3bd3da555e151ba518081a964a0cdb39ac33).
Solution: Declare buffer as WCHAR, drop type casts, use
          ARRAY_LENGTH macro (Ken Takata).

closes: #20424

Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/GvimExt/gvimext.cpp
src/version.c

index f98423c15f87ba0a7fe345c904a4f33630e10905..6d07b8b3c459be923249739f04f73131c8dabae7 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "gvimext.h"
 
+#define ARRAY_LENGTH(a) (sizeof(a) / sizeof((a)[0]))
+
 static char *searchpath(char *name);
 
 // Always get an error while putting the following stuff to the
@@ -849,7 +851,7 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
                    // If execution reaches this point we likely have an
                    // inconsistency between the code that setup the menus
                    // and this code that determines what the user
-                   // selected.  This should be detected and fixed during 
+                   // selected.  This should be detected and fixed during
                    // development.
                    return E_FAIL;
            }
@@ -957,16 +959,14 @@ BOOL CShellExt::LoadMenuIcon()
 searchpath(char *name)
 {
     static char widename[2 * BUFSIZE];
-    static char location[2 * BUFSIZE + 2];
+    WCHAR location[BUFSIZE + 1];
 
     // There appears to be a bug in FindExecutableA() on Windows NT.
     // Use FindExecutableW() instead...
-    MultiByteToWideChar(CP_ACP, 0, (LPCSTR)name, -1,
-           (LPWSTR)widename, BUFSIZE);
-    if (FindExecutableW((LPCWSTR)widename, (LPCWSTR)"",
-               (LPWSTR)location) > (HINSTANCE)32)
+    MultiByteToWideChar(CP_ACP, 0, name, -1, (LPWSTR)widename, BUFSIZE);
+    if (FindExecutableW((LPCWSTR)widename, L"", location) > (HINSTANCE)32)
     {
-       WideCharToMultiByte(CP_ACP, 0, (LPWSTR)location, -1,
+       WideCharToMultiByte(CP_ACP, 0, location, -1,
                (LPSTR)widename, 2 * BUFSIZE, NULL, NULL);
        return widename;
     }
@@ -1002,7 +1002,7 @@ STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent,
        DragQueryFileW((HDROP)medium.hGlobal,
                i,
                m_szFileUserClickedOn,
-               sizeof(m_szFileUserClickedOn));
+               ARRAY_LENGTH(m_szFileUserClickedOn));
 
        len = wcslen(cmdStrW) + wcslen(m_szFileUserClickedOn) + 4;
        if (len > cmdlen)
index 65550ac00497da0b720eb47923afde06661bb754..80200eb4ce47eeb8db240b56fff70406c76b7916 100644 (file)
@@ -729,6 +729,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    595,
 /**/
     594,
 /**/