mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	Fix a syntax error when ((...)) is combined with redirections (#68)
This bugfix was backported from ksh93v- 2013-10-10-alpha. src/cmd/ksh93/sh/parse: item(): - The done label is placed after the 'inout' call for handling I/O redirections. This causes the command below to produce a syntax error because the '>' is not handled as a redirection operator after 'goto done': $ ((1+2)) > /dev/null /usr/bin/ksh: syntax error: `>' unexpected Moving the done label fixes the syntax error as 'inout' is now called to handle the redirection operator. src/cmd/ksh93/tests/arith.sh: - Add a simple regression test.
This commit is contained in:
		
							parent
							
								
									361fe1fcc3
								
							
						
					
					
						commit
						6930666234
					
				
					 3 changed files with 10 additions and 2 deletions
				
			
		
							
								
								
									
										3
									
								
								NEWS
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								NEWS
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -12,6 +12,9 @@ Any uppercase BUG_* names are modernish shell bug IDs.
 | 
			
		|||
- Fixed a memory leak when restoring PATH when temporarily setting PATH
 | 
			
		||||
  for a command (e.g. PATH=/foo/bar command ...) or in a virtual subshell.
 | 
			
		||||
 | 
			
		||||
- Combining ((...)) with redirections no longer causes a syntax error
 | 
			
		||||
  due to the parser handling '>' incorrectly.
 | 
			
		||||
 | 
			
		||||
2020-07-07:
 | 
			
		||||
 | 
			
		||||
- Four of the date formats accepted by 'printf %()T' have had their
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1367,13 +1367,13 @@ static Shnode_t	*item(Lex_t *lexp,int flag)
 | 
			
		|||
		return(t);
 | 
			
		||||
	}
 | 
			
		||||
	sh_lex(lexp);
 | 
			
		||||
	/* redirection(s) following a compound command */
 | 
			
		||||
done:
 | 
			
		||||
	/* redirection(s) following a compound command or arithmetic expression */
 | 
			
		||||
	if(io=inout(lexp,io,0))
 | 
			
		||||
	{
 | 
			
		||||
		t=makeparent(lexp,TSETIO,t);
 | 
			
		||||
		t->tre.treio=io;
 | 
			
		||||
	}
 | 
			
		||||
done:
 | 
			
		||||
	lexp->lasttok = savwdval;
 | 
			
		||||
	lexp->lastline = savline;
 | 
			
		||||
	return(t);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -761,4 +761,9 @@ x=0x1.0000000000000000000000000000p+6
 | 
			
		|||
v=$(printf $'%.28a\n' 64)
 | 
			
		||||
[[ $v == "$x" ]] || err_exit "'printf %.28a 64' failed -- expected '$x', got '$v'"
 | 
			
		||||
 | 
			
		||||
# ======
 | 
			
		||||
# Redirections with ((...)) should not cause a syntax error
 | 
			
		||||
(eval '((1)) >/dev/null') 2>/dev/null || err_exit 'redirections with ((...)) yield a syntax error'
 | 
			
		||||
 | 
			
		||||
# ======
 | 
			
		||||
exit $((Errors<125?Errors:125))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue