HADOOP-7440. HttpServer.getParameterValues throws NPE for missing parameters. Contributed by Uma Maheswara Rao G and Todd Lipcon.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1143212 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d7f712cd42
commit
b908c9eb0e
@ -346,6 +346,9 @@ Trunk (unreleased changes)
|
|||||||
HADOOP-7090. Fix resource leaks in s3.INode, BloomMapFile, WritableUtils
|
HADOOP-7090. Fix resource leaks in s3.INode, BloomMapFile, WritableUtils
|
||||||
and CBZip2OutputStream. (Uma Maheswara Rao G via szetszwo)
|
and CBZip2OutputStream. (Uma Maheswara Rao G via szetszwo)
|
||||||
|
|
||||||
|
HADOOP-7440. HttpServer.getParameterValues throws NPE for missing
|
||||||
|
parameters. (Uma Maheswara Rao G and todd via todd)
|
||||||
|
|
||||||
Release 0.22.0 - Unreleased
|
Release 0.22.0 - Unreleased
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
@ -800,6 +800,9 @@ public String getParameter(String name) {
|
|||||||
public String[] getParameterValues(String name) {
|
public String[] getParameterValues(String name) {
|
||||||
String unquoteName = HtmlQuoting.unquoteHtmlChars(name);
|
String unquoteName = HtmlQuoting.unquoteHtmlChars(name);
|
||||||
String[] unquoteValue = rawRequest.getParameterValues(unquoteName);
|
String[] unquoteValue = rawRequest.getParameterValues(unquoteName);
|
||||||
|
if (unquoteValue == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String[] result = new String[unquoteValue.length];
|
String[] result = new String[unquoteValue.length];
|
||||||
for(int i=0; i < result.length; ++i) {
|
for(int i=0; i < result.length; ++i) {
|
||||||
result[i] = HtmlQuoting.quoteHtmlChars(unquoteValue[i]);
|
result[i] = HtmlQuoting.quoteHtmlChars(unquoteValue[i]);
|
||||||
|
@ -17,11 +17,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.hadoop.http;
|
package org.apache.hadoop.http;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.*;
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
public class TestHtmlQuoting {
|
public class TestHtmlQuoting {
|
||||||
|
|
||||||
@ -62,4 +63,28 @@ private void runRoundTrip(String str) throws Exception {
|
|||||||
}
|
}
|
||||||
runRoundTrip(buffer.toString());
|
runRoundTrip(buffer.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRequestQuoting() throws Exception {
|
||||||
|
HttpServletRequest mockReq = Mockito.mock(HttpServletRequest.class);
|
||||||
|
HttpServer.QuotingInputFilter.RequestQuoter quoter =
|
||||||
|
new HttpServer.QuotingInputFilter.RequestQuoter(mockReq);
|
||||||
|
|
||||||
|
Mockito.doReturn("a<b").when(mockReq).getParameter("x");
|
||||||
|
assertEquals("Test simple param quoting",
|
||||||
|
"a<b", quoter.getParameter("x"));
|
||||||
|
|
||||||
|
Mockito.doReturn(null).when(mockReq).getParameter("x");
|
||||||
|
assertEquals("Test that missing parameters dont cause NPE",
|
||||||
|
null, quoter.getParameter("x"));
|
||||||
|
|
||||||
|
Mockito.doReturn(new String[]{"a<b", "b"}).when(mockReq).getParameterValues("x");
|
||||||
|
assertArrayEquals("Test escaping of an array",
|
||||||
|
new String[]{"a<b", "b"}, quoter.getParameterValues("x"));
|
||||||
|
|
||||||
|
Mockito.doReturn(null).when(mockReq).getParameterValues("x");
|
||||||
|
assertArrayEquals("Test that missing parameters dont cause NPE for array",
|
||||||
|
null, quoter.getParameterValues("x"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,16 +45,20 @@
|
|||||||
import javax.servlet.http.HttpServletRequestWrapper;
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||||
|
import org.apache.hadoop.http.HttpServer.QuotingInputFilter.RequestQuoter;
|
||||||
import org.apache.hadoop.security.Groups;
|
import org.apache.hadoop.security.Groups;
|
||||||
import org.apache.hadoop.security.ShellBasedUnixGroupsMapping;
|
import org.apache.hadoop.security.ShellBasedUnixGroupsMapping;
|
||||||
import org.apache.hadoop.security.authorize.AccessControlList;
|
import org.apache.hadoop.security.authorize.AccessControlList;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
public class TestHttpServer extends HttpServerFunctionalTest {
|
public class TestHttpServer extends HttpServerFunctionalTest {
|
||||||
private static HttpServer server;
|
private static HttpServer server;
|
||||||
@ -379,4 +383,26 @@ public void testAuthorizationOfDefaultServlets() throws Exception {
|
|||||||
}
|
}
|
||||||
myServer.stop();
|
myServer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRequestQuoterWithNull() throws Exception {
|
||||||
|
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
|
||||||
|
Mockito.doReturn(null).when(request).getParameterValues("dummy");
|
||||||
|
RequestQuoter requestQuoter = new RequestQuoter(request);
|
||||||
|
String[] parameterValues = requestQuoter.getParameterValues("dummy");
|
||||||
|
Assert.assertEquals("It should return null "
|
||||||
|
+ "when there are no values for the parameter", null, parameterValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRequestQuoterWithNotNull() throws Exception {
|
||||||
|
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
|
||||||
|
String[] values = new String[] { "abc", "def" };
|
||||||
|
Mockito.doReturn(values).when(request).getParameterValues("dummy");
|
||||||
|
RequestQuoter requestQuoter = new RequestQuoter(request);
|
||||||
|
String[] parameterValues = requestQuoter.getParameterValues("dummy");
|
||||||
|
Assert.assertTrue("It should return Parameter Values", Arrays.equals(
|
||||||
|
values, parameterValues));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user