1616Py_FrozenMain (int argc , char * * argv )
1717{
1818 char * p ;
19- int i , n , sts ;
19+ int i , n , sts = 1 ;
2020 int inspect = 0 ;
2121 int unbuffered = 0 ;
22- char * oldloc ;
23- wchar_t * * argv_copy ;
22+ char * oldloc = NULL ;
23+ wchar_t * * argv_copy = NULL ;
2424 /* We need a second copies, as Python might modify the first one. */
25- wchar_t * * argv_copy2 ;
25+ wchar_t * * argv_copy2 = NULL ;
2626
27- argv_copy = PyMem_RawMalloc (sizeof (wchar_t * )* argc );
28- argv_copy2 = PyMem_RawMalloc (sizeof (wchar_t * )* argc );
27+ argv_copy = PyMem_RawMalloc (sizeof (wchar_t * ) * argc );
28+ argv_copy2 = PyMem_RawMalloc (sizeof (wchar_t * ) * argc );
2929 if (!argv_copy || !argv_copy2 ) {
3030 fprintf (stderr , "out of memory\n" );
31- return 1 ;
31+ goto error ;
3232 }
3333
3434 Py_FrozenFlag = 1 ; /* Suppress errors from getpath.c */
@@ -44,23 +44,26 @@ Py_FrozenMain(int argc, char **argv)
4444 setbuf (stderr , (char * )NULL );
4545 }
4646
47- if (!argv_copy ) {
47+ oldloc = _PyMem_RawStrdup (setlocale (LC_ALL , NULL ));
48+ if (!oldloc ) {
4849 fprintf (stderr , "out of memory\n" );
49- return 1 ;
50+ goto error ;
5051 }
5152
52- oldloc = setlocale (LC_ALL , NULL );
5353 setlocale (LC_ALL , "" );
5454 for (i = 0 ; i < argc ; i ++ ) {
5555 argv_copy [i ] = _Py_char2wchar (argv [i ], NULL );
56+ argv_copy2 [i ] = argv_copy [i ];
5657 if (!argv_copy [i ]) {
5758 fprintf (stderr , "Unable to decode the command line argument #%i\n" ,
5859 i + 1 );
59- return 1 ;
60+ argc = i ;
61+ goto error ;
6062 }
61- argv_copy2 [i ] = argv_copy [i ];
6263 }
6364 setlocale (LC_ALL , oldloc );
65+ PyMem_RawFree (oldloc );
66+ oldloc = NULL ;
6467
6568#ifdef MS_WINDOWS
6669 PyInitFrozenExtensions ();
@@ -94,10 +97,14 @@ Py_FrozenMain(int argc, char **argv)
9497 PyWinFreeze_ExeTerm ();
9598#endif
9699 Py_Finalize ();
97- for (i = 0 ; i < argc ; i ++ ) {
98- PyMem_RawFree (argv_copy2 [i ]);
99- }
100+
101+ error :
100102 PyMem_RawFree (argv_copy );
101- PyMem_RawFree (argv_copy2 );
103+ if (argv_copy2 ) {
104+ for (i = 0 ; i < argc ; i ++ )
105+ PyMem_RawFree (argv_copy2 [i ]);
106+ PyMem_RawFree (argv_copy2 );
107+ }
108+ PyMem_RawFree (oldloc );
102109 return sts ;
103110}
0 commit comments