mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	Fix set +r so that it cannot unset the restricted option
				
					
				
			The ksh man page documents that the restricted option cannot be unset once it is set, which means `set +r` should be invalid. While this was true for `set +o restricted`, `set +r` was causing the restricted option to be unset. The fix for this problem comes from one of Solaris' patches, which adds an error check to prevent this behavior. Solaris' patch: https://github.com/oracle/solaris-userland/blob/master/components/ksh93/patches/020-CR6919590.patch src/cmd/ksh93/sh/args.c: - Add an error check to stop `set +r` from unsetting the restricted option. src/cmd/ksh93/tests/restricted.sh: - Add two regression tests to make sure the restricted option cannot be unset. (cherry picked from commit bef4fee404d8e24b38fce66420c14a39ac4a123e)
This commit is contained in:
		
							parent
							
								
									9cef2d534a
								
							
						
					
					
						commit
						74b4162178
					
				
					 2 changed files with 8 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -302,6 +302,8 @@ int sh_argopts(int argc,register char *argv[], void *context)
 | 
			
		|||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			if ((o == SH_RESTRICTED) && sh_isoption(SH_RESTRICTED))
 | 
			
		||||
				errormsg(SH_DICT,ERROR_exit(1),e_restricted,"r"); /* set -r cannot be unset */
 | 
			
		||||
			if(o==SH_XTRACE)
 | 
			
		||||
				trace = 0;
 | 
			
		||||
			off_option(&newflags,o);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,4 +87,10 @@ for i in PATH ENV FPATH
 | 
			
		|||
do	check_restricted  "function foo { typeset $i=foobar;};foo" || err_exit "$i can be changed in function by using typeset"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# ======
 | 
			
		||||
# `set +r` and `set +o restricted` should not unset the restricted option
 | 
			
		||||
check_restricted 'set +r' 2> /dev/null || err_exit '`set +r` unsets the restricted option'
 | 
			
		||||
check_restricted 'set +o restricted' 2> /dev/null || err_exit '`set +o restricted` unsets the restricted option'
 | 
			
		||||
 | 
			
		||||
# ======
 | 
			
		||||
exit $((Errors<125?Errors:125))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue