diff --git a/mercurial/cext/osutil.c b/mercurial/cext/osutil.c --- a/mercurial/cext/osutil.c +++ b/mercurial/cext/osutil.c @@ -798,10 +798,17 @@ static PyObject *setprocname(PyObject *s char *argvend; extern void Py_GetArgcArgv(int *argc, char ***argv); Py_GetArgcArgv(&argc, &argv); + /* Py_GetArgcArgv may not do much if a custom python + * launcher is used that doesn't record the information + * it needs. Let's handle this gracefully instead of + * segfaulting. */ + if (argv != NULL) + argvend = argvstart = argv[0]; + else + argvend = argvstart = NULL; /* Check the memory we can use. Typically, argv[i] and * argv[i + 1] are continuous. */ - argvend = argvstart = argv[0]; for (i = 0; i < argc; ++i) { if (argv[i] > argvend || argv[i] < argvstart) break; /* not continuous */