mirror of
https://github.com/reactos/reactos.git
synced 2025-07-28 10:52:20 +00:00
[CRT]
- Handle realloc failure in SetEnv. Based on patch by Samuel Serapión CORE-7306 #resolve svn path=/trunk/; revision=59354
This commit is contained in:
parent
e2789d2b8b
commit
d7f51ee28b
1 changed files with 8 additions and 5 deletions
|
@ -214,6 +214,8 @@ int SetEnv(const wchar_t *option)
|
||||||
wchar_t *woption;
|
wchar_t *woption;
|
||||||
char *mboption;
|
char *mboption;
|
||||||
int remove, index, count, size, result = 0, found = 0;
|
int remove, index, count, size, result = 0, found = 0;
|
||||||
|
wchar_t **wnewenv;
|
||||||
|
char **mbnewenv;
|
||||||
|
|
||||||
if (option == NULL || (epos = wcschr(option, L'=')) == NULL)
|
if (option == NULL || (epos = wcschr(option, L'=')) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -261,14 +263,18 @@ int SetEnv(const wchar_t *option)
|
||||||
free(*wenvptr);
|
free(*wenvptr);
|
||||||
for (count = index; *wenvptr != NULL; wenvptr++, count++)
|
for (count = index; *wenvptr != NULL; wenvptr++, count++)
|
||||||
*wenvptr = *(wenvptr + 1);
|
*wenvptr = *(wenvptr + 1);
|
||||||
_wenviron = realloc(_wenviron, count * sizeof(wchar_t*));
|
wnewenv = realloc(_wenviron, count * sizeof(wchar_t*));
|
||||||
|
if (wnewenv != NULL)
|
||||||
|
_wenviron = wnewenv;
|
||||||
|
|
||||||
/* Remove the option from multibyte environment. We assume
|
/* Remove the option from multibyte environment. We assume
|
||||||
* the environments are in sync and the option is at the
|
* the environments are in sync and the option is at the
|
||||||
* same position. */
|
* same position. */
|
||||||
free(_environ[index]);
|
free(_environ[index]);
|
||||||
memmove(&_environ[index], &_environ[index+1], (count - index) * sizeof(char*));
|
memmove(&_environ[index], &_environ[index+1], (count - index) * sizeof(char*));
|
||||||
_environ = realloc(_environ, count * sizeof(char*));
|
mbnewenv = realloc(_environ, count * sizeof(char*));
|
||||||
|
if (mbnewenv != NULL)
|
||||||
|
_environ = mbnewenv;
|
||||||
|
|
||||||
result = SetEnvironmentVariableW(name, NULL) ? 0 : -1;
|
result = SetEnvironmentVariableW(name, NULL) ? 0 : -1;
|
||||||
}
|
}
|
||||||
|
@ -303,9 +309,6 @@ int SetEnv(const wchar_t *option)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wchar_t **wnewenv;
|
|
||||||
char **mbnewenv;
|
|
||||||
|
|
||||||
/* Get the size of the original environment. */
|
/* Get the size of the original environment. */
|
||||||
for (count = index; *wenvptr != NULL; wenvptr++, count++)
|
for (count = index; *wenvptr != NULL; wenvptr++, count++)
|
||||||
;
|
;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue