patch 9.0.1405: missing check for out-of-memory
Problem: Missing check for out-of-memory.
Solution: Check for alloc() returning NULL pointer. (closes #12149)
diff --git a/src/option.c b/src/option.c
index a2ab5c6..4d9da47 100644
--- a/src/option.c
+++ b/src/option.c
@@ -126,15 +126,14 @@
#endif
int len;
garray_T ga;
- int mustfree;
- char_u *item;
+ char_u *item;
opt_idx = findoption((char_u *)"backupskip");
ga_init2(&ga, 1, 100);
for (n = 0; n < (long)ARRAY_LENGTH(names); ++n)
{
- mustfree = FALSE;
+ int mustfree = FALSE;
#ifdef UNIX
if (*names[n] == NUL)
# ifdef MACOS_X
@@ -150,19 +149,22 @@
// First time count the NUL, otherwise count the ','.
len = (int)STRLEN(p) + 3;
item = alloc(len);
- STRCPY(item, p);
- add_pathsep(item);
- STRCAT(item, "*");
- if (find_dup_item(ga.ga_data, item, options[opt_idx].flags)
- == NULL
- && ga_grow(&ga, len) == OK)
+ if (item != NULL)
{
- if (ga.ga_len > 0)
- STRCAT(ga.ga_data, ",");
- STRCAT(ga.ga_data, item);
- ga.ga_len += len;
+ STRCPY(item, p);
+ add_pathsep(item);
+ STRCAT(item, "*");
+ if (find_dup_item(ga.ga_data, item, options[opt_idx].flags)
+ == NULL
+ && ga_grow(&ga, len) == OK)
+ {
+ if (ga.ga_len > 0)
+ STRCAT(ga.ga_data, ",");
+ STRCAT(ga.ga_data, item);
+ ga.ga_len += len;
+ }
+ vim_free(item);
}
- vim_free(item);
}
if (mustfree)
vim_free(p);