]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1434: MS-Windows: missing out-of-memory checks in os_win32.c v9.1.1434
authorJohn Marriott <basilisk@internode.on.net>
Thu, 5 Jun 2025 18:49:39 +0000 (20:49 +0200)
committerChristian Brabandt <cb@256bit.org>
Thu, 5 Jun 2025 18:49:39 +0000 (20:49 +0200)
Problem:  MS-Windows: missing out-of-memory checks in os_win32.c
Solution: Add out-of-memory checks to os_win32.c (John Marriott)

closes: #17441

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/os_win32.c
src/version.c

index 10bbb6c8df3b08e7b7b876dc85c13494444c948e..d85cbb2451c2ad3cf9137aa8e2c0d8eb771d4f6c 100644 (file)
@@ -1962,14 +1962,19 @@ encode_mouse_event(dict_T *args, INPUT_RECORD *ir)
     static int
 write_input_record_buffer(INPUT_RECORD* irEvents, int nLength)
 {
-    int nCount = 0;
+    int                                nCount = 0;
+    input_record_buffer_node_T *event_node;
+
     while (nCount < nLength)
     {
-       input_record_buffer.length++;
-       input_record_buffer_node_T *event_node =
-                                   malloc(sizeof(input_record_buffer_node_T));
+       event_node = alloc(sizeof(input_record_buffer_node_T));
+       if (event_node == NULL)
+           return -1;
+
        event_node->ir = irEvents[nCount++];
        event_node->next = NULL;
+
+       input_record_buffer.length++;
        if (input_record_buffer.tail == NULL)
        {
            input_record_buffer.head = event_node;
@@ -2065,7 +2070,13 @@ test_mswin_event(char_u *event, dict_T *args)
     // events.  But, this doesn't work well in the CI test environment.  So
     // implementing an input_record_buffer instead.
     if (input_encoded)
-       lpEventsWritten = write_input_record_buffer(&ir, 1);
+    {
+       if ((lpEventsWritten = write_input_record_buffer(&ir, 1)) < 0)
+       {
+           semsg(_(e_out_of_memory), "event");
+           return FALSE;
+       }
+    }
 
     // Set flags to execute the event, ie. like feedkeys mode X.
     if (execute)
@@ -3017,6 +3028,8 @@ mch_init_g(void)
        STRCPY(gettail(vimrun_location), "vimrun.exe");
        if (mch_getperm(vimrun_location) >= 0)
        {
+           char  *p;
+
            if (*skiptowhite(vimrun_location) != NUL)
            {
                // Enclose path with white space in double quotes.
@@ -3028,8 +3041,12 @@ mch_init_g(void)
            else
                STRCPY(gettail(vimrun_location), "vimrun ");
 
-           vimrun_path = (char *)vim_strsave(vimrun_location);
-           s_dont_use_vimrun = FALSE;
+           p = (char *)vim_strsave(vimrun_location);
+           if (p != NULL)
+           {
+               vimrun_path = p;
+               s_dont_use_vimrun = FALSE;
+           }
        }
        else if (executable_exists("vimrun.exe", NULL, TRUE, FALSE))
            s_dont_use_vimrun = FALSE;
@@ -7849,7 +7866,10 @@ copy_substream(HANDLE sh, void *context, WCHAR *to, WCHAR *substream, long len)
     HANDLE  hTo;
     WCHAR   *to_name;
 
-    to_name = malloc((wcslen(to) + wcslen(substream) + 1) * sizeof(WCHAR));
+    to_name = alloc((wcslen(to) + wcslen(substream) + 1) * sizeof(WCHAR));
+    if (to_name == NULL)
+       return;
+
     wcscpy(to_name, to);
     wcscat(to_name, substream);
 
@@ -8194,7 +8214,7 @@ get_cmd_argsW(char ***argvp)
     ArglistW = CommandLineToArgvW(GetCommandLineW(), &nArgsW);
     if (ArglistW != NULL)
     {
-       argv = malloc((nArgsW + 1) * sizeof(char *));
+       argv = alloc((nArgsW + 1) * sizeof(char *));
        if (argv != NULL)
        {
            argc = nArgsW;
@@ -8226,7 +8246,7 @@ get_cmd_argsW(char ***argvp)
     {
        if (used_file_indexes != NULL)
            free(used_file_indexes);
-       used_file_indexes = malloc(argc * sizeof(int));
+       used_file_indexes = alloc(argc * sizeof(int));
     }
 
     if (argvp != NULL)
index ccf24302f6d9e1216edceadb2d4e79ad8d425ccd..bfbe09d0d1091800990c065868216cf936fd7be9 100644 (file)
@@ -709,6 +709,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1434,
 /**/
     1433,
 /**/