Issue #4057 - NPE in HttpFields.containsKey
+ Preventing HttpField from having a null name. Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
This commit is contained in:
parent
49ba6d1acb
commit
91d3ddced6
|
@ -37,7 +37,14 @@ public class HttpField
|
||||||
public HttpField(HttpHeader header, String name, String value)
|
public HttpField(HttpHeader header, String name, String value)
|
||||||
{
|
{
|
||||||
_header = header;
|
_header = header;
|
||||||
_name = name;
|
if (_header != null && name == null)
|
||||||
|
{
|
||||||
|
_name = _header.asString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_name = Objects.requireNonNull(name);
|
||||||
|
}
|
||||||
_value = value;
|
_value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,8 +332,6 @@ public class HttpField
|
||||||
return false;
|
return false;
|
||||||
if (!_name.equalsIgnoreCase(field.getName()))
|
if (!_name.equalsIgnoreCase(field.getName()))
|
||||||
return false;
|
return false;
|
||||||
if (_value == null && field.getValue() != null)
|
|
||||||
return false;
|
|
||||||
return Objects.equals(_value, field.getValue());
|
return Objects.equals(_value, field.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,8 @@ import java.util.NoSuchElementException;
|
||||||
import org.eclipse.jetty.util.BufferUtil;
|
import org.eclipse.jetty.util.BufferUtil;
|
||||||
import org.hamcrest.Matchers;
|
import org.hamcrest.Matchers;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.ValueSource;
|
||||||
|
|
||||||
import static org.hamcrest.MatcherAssert.assertThat;
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
|
@ -666,6 +668,42 @@ public class HttpFieldsTest
|
||||||
assertFalse(header.containsKey("n11"));
|
assertFalse(header.containsKey("n11"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@ValueSource(strings = {"Host", "host", "HOST", "HoSt", "Connection", "CONNECTION", "connection", "CoNnEcTiOn"})
|
||||||
|
public void testContainsKeyTrue(String keyName)
|
||||||
|
{
|
||||||
|
HttpFields fields = new HttpFields();
|
||||||
|
fields.put("Host", "localhost");
|
||||||
|
HttpField namelessField = new HttpField(HttpHeader.CONNECTION, null, "bogus");
|
||||||
|
fields.put(namelessField);
|
||||||
|
|
||||||
|
assertTrue(fields.containsKey(keyName), "containsKey('" + keyName + "')");
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@ValueSource(strings = {"Content-Type", "Content-Length", "X-Bogus", ""})
|
||||||
|
public void testContainsKeyFalse(String keyName)
|
||||||
|
{
|
||||||
|
HttpFields fields = new HttpFields();
|
||||||
|
fields.add("Host", "localhost");
|
||||||
|
HttpField namelessField = new HttpField(HttpHeader.CONNECTION, null, "bogus");
|
||||||
|
fields.put(namelessField);
|
||||||
|
System.out.println(fields);
|
||||||
|
|
||||||
|
assertFalse(fields.containsKey(keyName), "containsKey('" + keyName + "')");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPreventNullField()
|
||||||
|
{
|
||||||
|
HttpFields fields = new HttpFields();
|
||||||
|
assertThrows(NullPointerException.class, () ->
|
||||||
|
{
|
||||||
|
HttpField nullNullField = new HttpField(null, null, "bogus");
|
||||||
|
fields.put(nullNullField);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIteration() throws Exception
|
public void testIteration() throws Exception
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue