From: Paris Oplopoios parisoplop@gmail.com
While the order that arguments are loaded by the kernel will never change, some emulators may push argument pointers in a different order which would cause a very large memset. --- loader/preloader.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/loader/preloader.c b/loader/preloader.c index d0551bae63a..2ee36824303 100644 --- a/loader/preloader.c +++ b/loader/preloader.c @@ -1381,6 +1381,7 @@ static void set_process_name( int argc, char *argv[] ) /* find the end of the argv array and move everything down */ end = argv[argc - 1]; while (*end) end++; + if (argv[1] < argv[0]) fatal_error( "argv[1] is located before argv[0]\n" ); off = argv[1] - argv[0]; for (p = argv[1]; p <= end; p++) *(p - off) = *p; wld_memset( end - off, 0, off );