Cygwin: exec: check execute bit prior to evaluating script
When the exec family of functions is called for a script-like file, the av::setup function handles the exec[vl]p case as well. The execve case for files not starting with a she-bang is handled first by returning ENOEXEC. Only after that, the file's executability is checked. This leads to the problem that ENOEXEC is returned for non-executable files as well. A calling shell interprets this as a file it should try to run as script. This is not desired for non-executable files. Fix this problem by checking the file for executability first. Only after that, follow the other potential code paths. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
		
							parent
							
								
									bf56973edc
								
							
						
					
					
						commit
						98669a2476
					
				|  | @ -1172,6 +1172,12 @@ av::setup (const char *prog_arg, path_conv& real_path, const char *ext, | |||
| 	  } | ||||
| 	UnmapViewOfFile (buf); | ||||
|   just_shell: | ||||
| 	/* Check if script is executable.  Otherwise we start non-executable
 | ||||
| 	   scripts successfully, which is incorrect behaviour. */ | ||||
| 	if (real_path.has_acls () | ||||
| 	    && check_file_access (real_path, X_OK, true) < 0) | ||||
| 	  return -1;	/* errno is already set. */ | ||||
| 
 | ||||
| 	if (!pgm) | ||||
| 	  { | ||||
| 	    if (!p_type_exec) | ||||
|  | @ -1188,12 +1194,6 @@ av::setup (const char *prog_arg, path_conv& real_path, const char *ext, | |||
| 	    arg1 = NULL; | ||||
| 	  } | ||||
| 
 | ||||
| 	/* Check if script is executable.  Otherwise we start non-executable
 | ||||
| 	   scripts successfully, which is incorrect behaviour. */ | ||||
| 	if (real_path.has_acls () | ||||
| 	    && check_file_access (real_path, X_OK, true) < 0) | ||||
| 	  return -1;	/* errno is already set. */ | ||||
| 
 | ||||
| 	/* Replace argv[0] with the full path to the script if this is the
 | ||||
| 	   first time through the loop. */ | ||||
| 	replace0_maybe (prog_arg); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue