ash: dont allow e.g. exec <&10 to attach to stript's fd!
function old new delta is_hidden_fd - 61 +61 redirect 1135 1164 +29 popstring 134 140 +6 printf_main 635 637 +2 evalvar 1374 1376 +2 echo_main 294 296 +2 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 5/0 up/down: 102/0) Total: 102 bytes
This commit is contained in:
		@@ -46,8 +46,11 @@ int echo_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
	 * even if libc receives EBADF on write attempts, it feels determined
 | 
			
		||||
	 * to output data no matter what. So it will try later,
 | 
			
		||||
	 * and possibly will clobber future output. Not good. */
 | 
			
		||||
	if (dup2(1, 1) != 1)
 | 
			
		||||
		return -1;
 | 
			
		||||
// TODO: check fcntl() & O_ACCMODE == O_WRONLY or O_RDWR?
 | 
			
		||||
	if (fcntl(1, F_GETFL) == -1)
 | 
			
		||||
		return 1; /* match coreutils 6.10 (sans error msg to stderr) */
 | 
			
		||||
	//if (dup2(1, 1) != 1) - old way
 | 
			
		||||
	//	return 1;
 | 
			
		||||
 | 
			
		||||
	arg = *++argv;
 | 
			
		||||
	if (!arg)
 | 
			
		||||
@@ -58,8 +61,8 @@ int echo_main(int argc UNUSED_PARAM, char **argv)
 | 
			
		||||
	char eflag = 0;
 | 
			
		||||
 | 
			
		||||
	/* We must check that stdout is not closed. */
 | 
			
		||||
	if (dup2(1, 1) != 1)
 | 
			
		||||
		return -1;
 | 
			
		||||
	if (fcntl(1, F_GETFL) == -1)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	while (1) {
 | 
			
		||||
		arg = *++argv;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user