diff -rauN Macaulay2-1.3.1-r10737-prefix/Macaulay2/d/M2lib.c Macaulay2-1.3.1-r10737.bz201739/Macaulay2/d/M2lib.c --- Macaulay2-1.3.1-r10737-prefix/Macaulay2/d/M2lib.c 2010-02-17 09:26:36.000000000 +0000 +++ Macaulay2-1.3.1-r10737.bz201739/Macaulay2/d/M2lib.c 2010-02-17 09:27:07.000000000 +0000 @@ -572,7 +572,19 @@ personality(oldpersonality | ADDR_NO_RANDOMIZE); newpersonality = personality(-1); personality(oldpersonality | ADDR_NO_RANDOMIZE); /* just in case the previous line sets the personality to -1, which can happen */ - if ((newpersonality & ADDR_NO_RANDOMIZE) != 0) return execvp(argv[0],argv); + if ((newpersonality & ADDR_NO_RANDOMIZE) != 0) { + /* Sometimes the personality isn't inherited. + Prevent endless loops by adding --no-personality to + the command line */ + char **new_argv = malloc((argc+2) * sizeof(char *)); + if (!new_argv) fatal("out of memory"); + + new_argv[0] = argv[0]; + new_argv[1] = "--no-personality"; + memcpy(&new_argv[2], &argv[1], sizeof(char *) * (argc)); + + return execvp(new_argv[0],new_argv); + } } else personality(oldpersonality); }