Snap for 8564071 from bc0f4f987a28b7161e46baf6cfd6d246f5cb5472 to mainline-tethering-release

Change-Id: I0b2361daf0ebce7292ee4bce7e7a5ca22b45bd2a
diff --git a/fileupload/.gitignore b/fileupload/.gitignore
deleted file mode 100644
index 868a6b2..0000000
--- a/fileupload/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/.settings/
-/LICENSE.txt
diff --git a/fileupload/README b/fileupload/README
new file mode 100644
index 0000000..4c70d72
--- /dev/null
+++ b/fileupload/README
@@ -0,0 +1 @@
+nanohttpd/fileupload is removed due to CVE-2016-1000031
\ No newline at end of file
diff --git a/fileupload/pom.xml b/fileupload/pom.xml
deleted file mode 100644
index a90469a..0000000
--- a/fileupload/pom.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<parent>
-		<artifactId>nanohttpd-project</artifactId>
-		<groupId>org.nanohttpd</groupId>
-		<version>2.2.0</version>
-	</parent>
-	<modelVersion>4.0.0</modelVersion>
-	<artifactId>nanohttpd-apache-fileupload</artifactId>
-	<name>NanoHttpd-apache file upload integration</name>
-	<description>nanohttpd-apache-fileupload integrates the apache file upload framework into nanohttpd</description>
-	<dependencies>
-		<dependency>
-			<groupId>org.nanohttpd</groupId>
-			<artifactId>nanohttpd</artifactId>
-			<version>2.2.0</version>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>commons-fileupload</groupId>
-			<artifactId>commons-fileupload</artifactId>
-			<version>1.3.1</version>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-			<version>2.5</version>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.httpcomponents</groupId>
-			<artifactId>httpclient</artifactId>
-			<version>4.4.1</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.httpcomponents</groupId>
-			<artifactId>httpmime</artifactId>
-			<version>4.4.1</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-	<properties>
-		<minimal.coverage>0.99</minimal.coverage>
-	</properties>
-</project>
\ No newline at end of file
diff --git a/fileupload/src/main/java/fi/iki/elonen/NanoFileUpload.java b/fileupload/src/main/java/fi/iki/elonen/NanoFileUpload.java
deleted file mode 100644
index ec02d4a..0000000
--- a/fileupload/src/main/java/fi/iki/elonen/NanoFileUpload.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package fi.iki.elonen;
-
-/*
- * #%L
- * apache-fileupload-integration
- * %%
- * Copyright (C) 2012 - 2015 nanohttpd
- * %%
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- * 1. Redistributions of source code must retain the above copyright notice, this
- *    list of conditions and the following disclaimer.
- * 
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 
- * 3. Neither the name of the nanohttpd nor the names of its contributors
- *    may be used to endorse or promote products derived from this software without
- *    specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * #L%
- */
-
-import static fi.iki.elonen.NanoHTTPD.Method.POST;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileItemFactory;
-import org.apache.commons.fileupload.FileItemIterator;
-import org.apache.commons.fileupload.FileUpload;
-import org.apache.commons.fileupload.FileUploadBase;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.UploadContext;
-
-/**
- * @author victor & ritchieGitHub
- */
-public class NanoFileUpload extends FileUpload {
-
-    public static class NanoHttpdContext implements UploadContext {
-
-        private NanoHTTPD.IHTTPSession session;
-
-        public NanoHttpdContext(NanoHTTPD.IHTTPSession session) {
-            this.session = session;
-        }
-
-        @Override
-        public long contentLength() {
-            long size;
-            try {
-                String cl1 = session.getHeaders().get("content-length");
-                size = Long.parseLong(cl1);
-            } catch (NumberFormatException var4) {
-                size = -1L;
-            }
-
-            return size;
-        }
-
-        @Override
-        public String getCharacterEncoding() {
-            return "UTF-8";
-        }
-
-        @Override
-        public String getContentType() {
-            return this.session.getHeaders().get("content-type");
-        }
-
-        @Override
-        public int getContentLength() {
-            return (int) contentLength();
-        }
-
-        @Override
-        public InputStream getInputStream() throws IOException {
-            return session.getInputStream();
-        }
-    }
-
-    public static final boolean isMultipartContent(NanoHTTPD.IHTTPSession session) {
-        return session.getMethod() == POST && FileUploadBase.isMultipartContent(new NanoHttpdContext(session));
-    }
-
-    public NanoFileUpload(FileItemFactory fileItemFactory) {
-        super(fileItemFactory);
-    }
-
-    public List<FileItem> parseRequest(NanoHTTPD.IHTTPSession session) throws FileUploadException {
-        return this.parseRequest(new NanoHttpdContext(session));
-    }
-
-    public Map<String, List<FileItem>> parseParameterMap(NanoHTTPD.IHTTPSession session) throws FileUploadException {
-        return this.parseParameterMap(new NanoHttpdContext(session));
-    }
-
-    public FileItemIterator getItemIterator(NanoHTTPD.IHTTPSession session) throws FileUploadException, IOException {
-        return super.getItemIterator(new NanoHttpdContext(session));
-    }
-
-}
diff --git a/fileupload/src/test/java/fi/iki/elonen/TestNanoFileUpLoad.java b/fileupload/src/test/java/fi/iki/elonen/TestNanoFileUpLoad.java
deleted file mode 100644
index ac18e3a..0000000
--- a/fileupload/src/test/java/fi/iki/elonen/TestNanoFileUpLoad.java
+++ /dev/null
@@ -1,246 +0,0 @@
-package fi.iki.elonen;
-
-/*
- * #%L
- * NanoHttpd-apache file upload integration
- * %%
- * Copyright (C) 2012 - 2015 nanohttpd
- * %%
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- * 1. Redistributions of source code must retain the above copyright notice, this
- *    list of conditions and the following disclaimer.
- * 
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 
- * 3. Neither the name of the nanohttpd nor the names of its contributors
- *    may be used to endorse or promote products derived from this software without
- *    specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * #L%
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileItemIterator;
-import org.apache.commons.fileupload.FileItemStream;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.util.Streams;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpTrace;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.mime.HttpMultipartMode;
-import org.apache.http.entity.mime.MultipartEntityBuilder;
-import org.apache.http.entity.mime.content.FileBody;
-import org.apache.http.entity.mime.content.StringBody;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
-import org.junit.internal.runners.statements.Fail;
-
-import fi.iki.elonen.NanoHTTPD.Response.Status;
-
-/**
- * very strange but if the file upload is the first request the test fails.
- * 
- * @author ritchieGitHub
- */
-@FixMethodOrder
-public class TestNanoFileUpLoad {
-
-    protected TestServer testServer;
-
-    public static class TestServer extends NanoHTTPD {
-
-        public Response response = newFixedLengthResponse("");
-
-        public String uri;
-
-        public Method method;
-
-        public Map<String, String> header;
-
-        public Map<String, String> parms;
-
-        public Map<String, List<FileItem>> files;
-
-        public Map<String, List<String>> decodedParamters;
-
-        public Map<String, List<String>> decodedParamtersFromParameter;
-
-        public String queryParameterString;
-
-        public TestServer() {
-            super(8192);
-            uploader = new NanoFileUpload(new DiskFileItemFactory());
-        }
-
-        public HTTPSession createSession(TempFileManager tempFileManager, InputStream inputStream, OutputStream outputStream) {
-            return new HTTPSession(tempFileManager, inputStream, outputStream);
-        }
-
-        public HTTPSession createSession(TempFileManager tempFileManager, InputStream inputStream, OutputStream outputStream, InetAddress inetAddress) {
-            return new HTTPSession(tempFileManager, inputStream, outputStream, inetAddress);
-        }
-
-        NanoFileUpload uploader;
-
-        @Override
-        public Response serve(IHTTPSession session) {
-
-            this.uri = session.getUri();
-            this.method = session.getMethod();
-            this.header = session.getHeaders();
-            this.parms = session.getParms();
-            if (NanoFileUpload.isMultipartContent(session)) {
-                try {
-                    if ("/uploadFile1".equals(this.uri)) {
-                        session.getHeaders().put("content-length", "AA");
-                        files = uploader.parseParameterMap(session);
-                    }
-                    if ("/uploadFile2".equals(this.uri)) {
-                        files = new HashMap<String, List<FileItem>>();
-                        List<FileItem> parseRequest = uploader.parseRequest(session);
-                        files.put(parseRequest.get(0).getFieldName(), parseRequest);
-                    }
-                    if ("/uploadFile3".equals(this.uri)) {
-                        files = new HashMap<String, List<FileItem>>();
-                        FileItemIterator iter = uploader.getItemIterator(session);
-                        while (iter.hasNext()) {
-                            FileItemStream item = iter.next();
-                            final String fileName = item.getName();
-                            FileItem fileItem = uploader.getFileItemFactory().createItem(item.getFieldName(), item.getContentType(), item.isFormField(), fileName);
-                            files.put(fileItem.getFieldName(), Arrays.asList(new FileItem[]{
-                                fileItem
-                            }));
-                            try {
-                                Streams.copy(item.openStream(), fileItem.getOutputStream(), true);
-                            } catch (Exception e) {
-                            }
-                            fileItem.setHeaders(item.getHeaders());
-                        }
-                    }
-                } catch (Exception e) {
-                    this.response.setStatus(Status.INTERNAL_ERROR);
-                    e.printStackTrace();
-                }
-            }
-            this.queryParameterString = session.getQueryParameterString();
-            this.decodedParamtersFromParameter = decodeParameters(this.queryParameterString);
-            this.decodedParamters = decodeParameters(session.getQueryParameterString());
-            return this.response;
-        }
-
-    }
-
-    @Test
-    public void testNormalRequest() throws Exception {
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        HttpTrace httphead = new HttpTrace("http://localhost:8192/index.html");
-        CloseableHttpResponse response = httpclient.execute(httphead);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-        response.close();
-    }
-
-    @Test
-    public void testPostWithMultipartFormUpload1() throws Exception {
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        String textFileName = "src/test/java/fi/iki/elonen/TestNanoFileUpLoad.java";
-        HttpPost post = new HttpPost("http://localhost:8192/uploadFile1");
-
-        executeUpload(httpclient, textFileName, post);
-        FileItem file = this.testServer.files.get("upfile").get(0);
-        Assert.assertEquals(file.getSize(), new File(textFileName).length());
-    }
-
-    @Test
-    public void testPostWithMultipartFormUpload2() throws Exception {
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        String textFileName = "src/test/java/fi/iki/elonen/TestNanoFileUpLoad.java";
-        HttpPost post = new HttpPost("http://localhost:8192/uploadFile2");
-
-        executeUpload(httpclient, textFileName, post);
-        FileItem file = this.testServer.files.get("upfile").get(0);
-        Assert.assertEquals(file.getSize(), new File(textFileName).length());
-    }
-
-    @Test
-    public void testPostWithMultipartFormUpload3() throws Exception {
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        String textFileName = "src/test/java/fi/iki/elonen/TestNanoFileUpLoad.java";
-        HttpPost post = new HttpPost("http://localhost:8192/uploadFile3");
-
-        executeUpload(httpclient, textFileName, post);
-        FileItem file = this.testServer.files.get("upfile").get(0);
-        Assert.assertEquals(file.getSize(), new File(textFileName).length());
-    }
-
-    private void executeUpload(CloseableHttpClient httpclient, String textFileName, HttpPost post) throws IOException, ClientProtocolException {
-        FileBody fileBody = new FileBody(new File(textFileName), ContentType.DEFAULT_BINARY);
-        StringBody stringBody1 = new StringBody("Message 1", ContentType.MULTIPART_FORM_DATA);
-
-        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
-        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
-        builder.addPart("upfile", fileBody);
-        builder.addPart("text1", stringBody1);
-        HttpEntity entity = builder.build();
-        //
-        post.setEntity(entity);
-        HttpResponse response = httpclient.execute(post);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-    }
-
-    @Before
-    public void setUp() throws IOException {
-        this.testServer = new TestServer();
-        this.testServer.start();
-        try {
-            long start = System.currentTimeMillis();
-            Thread.sleep(100L);
-            while (!this.testServer.wasStarted()) {
-                Thread.sleep(100L);
-                if (System.currentTimeMillis() - start > 2000) {
-                    Assert.fail("could not start server");
-                }
-            }
-        } catch (InterruptedException e) {
-        }
-    }
-
-    @After
-    public void tearDown() {
-        this.testServer.stop();
-    }
-
-}