Issue #15893: frozenmain.c now handles PyMem_Malloc() failure

This commit is contained in:
Victor Stinner 2013-07-27 01:04:56 +02:00
parent 70c94e7896
commit 36577e4e8c
2 changed files with 19 additions and 8 deletions

View File

@ -18,11 +18,19 @@ wmain(int argc, wchar_t **argv)
int
main(int argc, char **argv)
{
wchar_t **argv_copy = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*(argc+1));
wchar_t **argv_copy;
/* We need a second copy, as Python might modify the first one. */
wchar_t **argv_copy2 = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*(argc+1));
wchar_t **argv_copy2;
int i, res;
char *oldloc;
argv_copy = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*(argc+1));
argv_copy2 = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*(argc+1));
if (!argv_copy || !argv_copy2) {
fprintf(stderr, "out of memory\n");
return 1;
}
/* 754 requires that FP exceptions run in "no stop" mode by default,
* and until C vendors implement C99's ways to control FP exceptions,
* Python requires non-stop mode. Alas, some platforms enable FP
@ -34,10 +42,6 @@ main(int argc, char **argv)
m = fpgetmask();
fpsetmask(m & ~FP_X_OFL);
#endif
if (!argv_copy || !argv_copy2) {
fprintf(stderr, "out of memory\n");
return 1;
}
oldloc = strdup(setlocale(LC_ALL, NULL));
setlocale(LC_ALL, "");
for (i = 0; i < argc; i++) {

View File

@ -20,9 +20,16 @@ Py_FrozenMain(int argc, char **argv)
int inspect = 0;
int unbuffered = 0;
char *oldloc;
wchar_t **argv_copy = PyMem_Malloc(sizeof(wchar_t*)*argc);
wchar_t **argv_copy;
/* We need a second copies, as Python might modify the first one. */
wchar_t **argv_copy2 = PyMem_Malloc(sizeof(wchar_t*)*argc);
wchar_t **argv_copy2;
argv_copy = PyMem_Malloc(sizeof(wchar_t*)*argc);
argv_copy2 = PyMem_Malloc(sizeof(wchar_t*)*argc);
if (!argv_copy || !argv_copy2) {
fprintf(stderr, "out of memory\n");
return 1;
}
Py_FrozenFlag = 1; /* Suppress errors from getpath.c */