From: Paris Oplopoios <parisoplop(a)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 ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8396