diff -r 460f8bf58020 -r d6227c6c0814 mercurial/cext/osutil.c --- a/mercurial/cext/osutil.c Tue Sep 17 14:57:42 2019 -0700 +++ b/mercurial/cext/osutil.c Tue Sep 17 15:09:25 2019 -0700 @@ -798,10 +798,17 @@ 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 */