private void pushBufferOnEndOfStateHeaders(final byte[] bytes, final int start, final int end) throws FileNotFoundException, MalformedInputException { for (int i = start; i < end; i++) { headersStringBuffered.append((char) bytes[i]); } multipartHeadersPart = multipartHeadersPartParser.parse(headersStringBuffered.toString()); if (multipartHeadersPart.getContentType() != null) { currentFile = new File(temporaryUploadsDirectory + StringUtilities.generateRandom()); fileOutputStream = new FileOutputStream(currentFile); } else { valueStringBuffered.setLength(0); } headersStringBuffered.setLength(0); } }
private Map<String, Cookie> getCookies(final Headers headers) { if (headers.containsHeader(Headers.HEADER_COOKIE)) { try { return cookieParser.parse(headers.getHeader(Headers.HEADER_COOKIE)); } catch (MalformedInputException e) { // Returns an empty map } } return new HashMap<>(); }
private void handlePostPlainRequest(final HttpServletRequestImpl.Builder builder, final InputStream in, final int postLength) throws IOException, MalformedInputException { byte[] buffer; buffer = new byte[1]; StringBuilder postLine = new StringBuilder(); while (in.read(buffer, 0, buffer.length) != -1) { postLine.append((char) buffer[0]); if (postLine.length() == postLength) { break; } } Statistics.addBytesReceived(postLine.length()); builder.withPostParameters(queryStringParser.parse(postLine.toString())); }
/** * Reads and computes headers. * * @param in * @return * @throws IOException */ private Headers computeHeaders(final InputStream in) throws IOException { String headersString = getHeadersString(in); if (headersString.length() > MINUMUM_HEADER_LINE_LENGTH) { try { return headersParser.parse(headersString); } catch (MalformedInputException e) { throw new ProtocolException("Malformed request headers"); } } // TODO Write a test that sends a request containing status line only return new Headers(); }
@Test(expected = MalformedInputException.class) public void shouldThrowMalformedInputExceptionForMissingClosing() throws MalformedInputException { multipartHeadersPartParser.parse("Content-Disposition: form-data; name=\"text"); } }
@Test(expected = MalformedInputException.class) public void shouldThrowMalformedInputException() throws MalformedInputException { multipartHeadersPartParser.parse("Content-Disposition: form-data; name=\"text\" filename=\"text"); }
@Test public void shouldReturnZeroSizeForInvalidValue() throws MalformedInputException { Map<String, Cookie> cookies = cookieParser.parse("name"); assertThat(cookies.size(), is(0)); }
@Test public void shouldParseEmptyValue() throws MalformedInputException { Map<String, Cookie> cookies = cookieParser.parse(""); assertThat(cookies.size(), is(0)); }
@Test public void shouldReturnZeroSizeForInvalidKey() throws MalformedInputException { Map<String, Cookie> cookies = cookieParser.parse(" = value"); assertThat(cookies.size(), is(0)); }
@Test public void shouldAssignNoCookieOnMalformedCookieString() throws Exception { headers.setHeader(Headers.HEADER_COOKIE, "ANYTHING"); when(cookieParser.parse(any(String.class))).thenThrow(new MalformedInputException("ANY")); HttpServletRequestImpl request = factory.createFromSocket(socket); assertThat(request.getCookies().length, is(0)); verify(cookieParser, times(1)).parse(any(String.class)); }
@Test public void shouldParseMalformedEmptyValue() throws MalformedInputException { Map<String, Cookie> cookies = cookieParser.parse(" ; "); assertThat(cookies.size(), is(0)); } }
@Test(expected = ProtocolException.class) public void shouldThrowProtocolExceptionOnMalformedHeaders() throws Exception { when(headersParser.parse(any(String.class))).thenThrow(new MalformedInputException("ANY")); factory.createFromSocket(socket); }
@Before public void setUp() throws Exception { headers = new Headers(); headersParser = mock(Parser.class); when(headersParser.parse(any(String.class))).thenReturn(headers); cookieParser = mock(Parser.class); factory = new HttpServletRequestImplFactory( headersParser, mock(Parser.class), new RequestStatusParser(), cookieParser, mock(Parser.class), "" ); InputStream inputStream = new ByteArrayInputStream("GET / HTTP/1.0\r\nHeader1: someValue\r\n\r\n".getBytes()); socket = mock(Socket.class); when(socket.getInputStream()).thenReturn(inputStream); when(socket.getInetAddress()).thenReturn(mock(InetAddress.class)); when(socket.getLocalAddress()).thenReturn(mock(InetAddress.class)); when(socket.getRemoteSocketAddress()).thenReturn(new InetSocketAddress(mock(InetAddress.class), 1)); }
@Test public void shouldParseEmptyFields() throws MalformedInputException { String data = ""; Parser<Map<String, String>> parser = new QueryStringParser(); Map<String, String> parameters = parser.parse(data); assertThat(parameters.size(), is(0)); }
@Test public void shouldParseNonValidString() throws MalformedInputException { String data = "/"; Parser<Map<String, String>> parser = new QueryStringParser(); Map<String, String> parameters = parser.parse(data); assertThat(parameters.size(), is(0)); }
@Test(expected = MalformedInputException.class) public void shouldThrowMalformedInputExceptionOnInvalidStatus() throws MalformedInputException { Parser<RequestStatus> requestStatusParser = new RequestStatusParser(); requestStatusParser.parse("GET HTTP/1.1"); } }
@Test public void shouldParseFields() throws MalformedInputException { String data = "¶m1=ABCD1" + "¶m2=ABCD2" + "¶m3=ABC=DEF" + "¶m4=A%20B%20%3D%20%25%20*"; Parser<Map<String, String>> parser = new QueryStringParser(); Map<String, String> parameters = parser.parse(data); assertThat(parameters.size(), is(4)); assertThat(parameters.get("param1"), is("ABCD1")); assertThat(parameters.get("param2"), is("ABCD2")); assertThat(parameters.get("param3"), is("ABC=DEF")); assertThat(parameters.get("param4"), is("A B = % *")); }
@Test public void shouldParseIncompleteFields() throws MalformedInputException { String data = "=¶m1=" + "&&" + "¶m1=" + "¶m2=ABCD2" + "¶m3=ABC=DEF" + "¶m4=A%20B%20%3D%20%25%20*"; Parser<Map<String, String>> parser = new QueryStringParser(); Map<String, String> parameters = parser.parse(data); assertThat(parameters.size(), is(4)); assertThat(parameters.get("param1"), is("")); assertThat(parameters.get("param2"), is("ABCD2")); assertThat(parameters.get("param3"), is("ABC=DEF")); assertThat(parameters.get("param4"), is("A B = % *")); } }
@Test public void shouldParseFormDataTextWhenThereIsNoName() throws MalformedInputException { MultipartHeadersPart headers = multipartHeadersPartParser.parse("Content-Disposition: form-data;"); assertThat(headers.getFileName(), is(nullValue())); assertThat(headers.getName(), is(nullValue())); assertThat(headers.getContentType(), is(nullValue())); }
@Test public void shouldParseFormDataText() throws MalformedInputException { MultipartHeadersPart headers = multipartHeadersPartParser.parse("Content-Disposition: form-data; name=\"text\""); assertThat(headers.getFileName(), is(nullValue())); assertThat(headers.getName(), is("text")); assertThat(headers.getContentType(), is(nullValue())); }