Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master
http://hackage.haskell.org/trac/ghc/changeset/0d19922acd724991b7b97871b1404f3db5058b49 >--------------------------------------------------------------- commit 0d19922acd724991b7b97871b1404f3db5058b49 Author: Simon Marlow <[email protected]> Date: Mon Jul 2 15:55:20 2012 +0100 don't crash if argv[0] == NULL (#7037) >--------------------------------------------------------------- rts/RtsFlags.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c index 4e156e6..7c86efa 100644 --- a/rts/RtsFlags.c +++ b/rts/RtsFlags.c @@ -474,7 +474,7 @@ void setupRtsFlags (int *argc, char *argv[], total_arg = *argc; arg = 1; - *argc = 1; + if (*argc > 1) { *argc = 1; }; rts_argc = 0; rts_argv_size = total_arg + 1; @@ -1677,16 +1677,22 @@ static void freeArgv(int argc, char *argv[]) void setProgName(char *argv[]) { + char *last_slash; + + if (argv[0] == NULL) { // #7037 + prog_name = ""; + return; + } + /* Remove directory from argv[0] -- default files in current directory */ #if !defined(mingw32_HOST_OS) - char *last_slash; if ( (last_slash = (char *) strrchr(argv[0], '/')) != NULL ) { prog_name = last_slash+1; } else { prog_name = argv[0]; } #else - char* last_slash = argv[0] + (strlen(argv[0]) - 1); + last_slash = argv[0] + (strlen(argv[0]) - 1); while ( last_slash > argv[0] ) { if ( *last_slash == '/' || *last_slash == '\\' ) { prog_name = last_slash+1; _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
