mirror of
https://github.com/php/php-src.git
synced 2026-03-31 04:32:19 +02:00
The old code checked for suffixes but didn't take into account trailing whitespace. Furthermore, there is peculiar behaviour with trailing dots too. This all happens because of the special path-handling code inside CreateProcessW. By studying Wine's code, we can see that CreateProcessInternalW calls get_file_name [1] in our case because we haven't provided an application name. That code gets the first whitespace-delimited string into app_name excluding the quotes. It's then passed to create_process_params [2] where there is the path handling code that transforms the command line argument to an image path [3]. Inside Wine, the extension check if performed after these transformations [4]. By doing the same thing in PHP we match the behaviour and can properly match the extension even in the given edge cases. [1]166895ae3a/dlls/kernelbase/process.c (L542-L543)[2]166895ae3a/dlls/kernelbase/process.c (L565)[3]166895ae3a/dlls/kernelbase/process.c (L150-L151)[4]166895ae3a/dlls/kernelbase/process.c (L647-L654)