fixes setting paramName only when it is not null
Fixes: gh-6223
This commit is contained in:
		
							parent
							
								
									f234a5fbdb
								
							
						
					
					
						commit
						4ff51491d7
					
				|  | @ -112,7 +112,9 @@ class MethodSecurityEvaluationContext extends StandardEvaluationContext { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		for (int i = 0; i < args.length; i++) { | 		for (int i = 0; i < args.length; i++) { | ||||||
| 			super.setVariable(paramNames[i], args[i]); | 			if (paramNames[i] != null) { | ||||||
|  | 				setVariable(paramNames[i], args[i]); | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,76 @@ | ||||||
|  | /* | ||||||
|  |  * Copyright 2002-2016 the original author or authors. | ||||||
|  |  * | ||||||
|  |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |  * you may not use this file except in compliance with the License. | ||||||
|  |  * You may obtain a copy of the License at | ||||||
|  |  * | ||||||
|  |  *      http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  * | ||||||
|  |  * Unless required by applicable law or agreed to in writing, software | ||||||
|  |  * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |  * See the License for the specific language governing permissions and | ||||||
|  |  * limitations under the License. | ||||||
|  |  */ | ||||||
|  | package org.springframework.security.access.expression.method; | ||||||
|  | 
 | ||||||
|  | import java.lang.reflect.Method; | ||||||
|  | 
 | ||||||
|  | import org.aopalliance.intercept.MethodInvocation; | ||||||
|  | import org.junit.Test; | ||||||
|  | import org.junit.runner.RunWith; | ||||||
|  | import org.mockito.Mock; | ||||||
|  | import org.mockito.junit.MockitoJUnitRunner; | ||||||
|  | 
 | ||||||
|  | import org.springframework.core.ParameterNameDiscoverer; | ||||||
|  | import org.springframework.lang.Nullable; | ||||||
|  | import org.springframework.security.core.Authentication; | ||||||
|  | import org.springframework.util.ReflectionUtils; | ||||||
|  | 
 | ||||||
|  | import static org.mockito.Mockito.doReturn; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @author shabarijonnalagadda | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | @RunWith(MockitoJUnitRunner.class) | ||||||
|  | public class MethodSecurityEvaluationContextTests { | ||||||
|  | 	@Mock | ||||||
|  | 	private ParameterNameDiscoverer paramNameDiscoverer; | ||||||
|  | 	@Mock | ||||||
|  | 	private Authentication authentication; | ||||||
|  | 	@Mock | ||||||
|  | 	private MethodInvocation methodInvocation; | ||||||
|  | 
 | ||||||
|  | 	@Test | ||||||
|  | 	public void lookupVariableWhenParameterNameNullThenNotSet() { | ||||||
|  | 		Class<String> type = String.class; | ||||||
|  | 		Method method = ReflectionUtils.findMethod(String.class, "contains", CharSequence.class); | ||||||
|  | 		doReturn(new String[] {null}).when(paramNameDiscoverer).getParameterNames(method); | ||||||
|  | 		doReturn(new Object[]{null}).when(methodInvocation).getArguments(); | ||||||
|  | 		doReturn(type).when(methodInvocation).getThis(); | ||||||
|  | 		doReturn(method).when(methodInvocation).getMethod(); | ||||||
|  | 		NotNullVariableMethodSecurityEvaluationContext context= new NotNullVariableMethodSecurityEvaluationContext(authentication, methodInvocation, paramNameDiscoverer); | ||||||
|  | 		context.lookupVariable("testVariable"); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	private static class  NotNullVariableMethodSecurityEvaluationContext | ||||||
|  | 			extends MethodSecurityEvaluationContext { | ||||||
|  | 
 | ||||||
|  | 		public NotNullVariableMethodSecurityEvaluationContext(Authentication auth, MethodInvocation mi, | ||||||
|  | 				ParameterNameDiscoverer parameterNameDiscoverer) { | ||||||
|  | 			super(auth, mi, parameterNameDiscoverer); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		@Override | ||||||
|  | 		public void setVariable(String name, @Nullable Object value) { | ||||||
|  | 			if ( name == null ) { | ||||||
|  | 				throw new IllegalArgumentException("name  should not be null"); | ||||||
|  | 			} | ||||||
|  | 			else { | ||||||
|  | 				super.setVariable(name, value); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue