patch 9.1.1434: MS-Windows: missing out-of-memory checks in os_win32.c
Commit:
https://github.com/vim/vim/commit/738df3887f73ab2b3c87b30d41fb9c27a7bb3022
Author: John Marriott <[email protected]>
Date: Thu Jun 5 20:49:39 2025 +0200
patch 9.1.1434: MS-Windows: missing out-of-memory checks in os_win32.c
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 <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/os_win32.c b/src/os_win32.c
index 10bbb6c8d..d85cbb245 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -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)
diff --git a/src/version.c b/src/version.c
index ccf24302f..bfbe09d0d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -709,6 +709,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1434,
/**/
1433,
/**/
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1uNFop-001zYD-8w%40256bit.org.