You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2016/11/07 18:34:44 UTC

wicket git commit: WICKET-6270 check name of uploaded file is not empty

Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 7d164c618 -> 3a6eb04ca


WICKET-6270 check name of uploaded file is not empty


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3a6eb04c
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3a6eb04c
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3a6eb04c

Branch: refs/heads/wicket-6.x
Commit: 3a6eb04ca17789b859e6efea067ea4bfddafa2c8
Parents: 7d164c6
Author: Sven Meier <sv...@apache.org>
Authored: Mon Nov 7 19:20:07 2016 +0100
Committer: Sven Meier <sv...@apache.org>
Committed: Mon Nov 7 19:27:47 2016 +0100

----------------------------------------------------------------------
 .../html/form/upload/FileUploadField.java       |  6 ++-
 .../http/mock/MockHttpServletRequest.java       | 51 +++++++++++---------
 .../apache/wicket/util/tester/FormTester.java   |  2 +-
 .../html/form/upload/FileUploadFieldTest.java   | 41 +++++++++++++---
 4 files changed, 68 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/3a6eb04c/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
index 07f81f3..512e472 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/FileUploadField.java
@@ -26,6 +26,7 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.protocol.http.IMultipartWebRequest;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.util.convert.ConversionException;
+import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.upload.FileItem;
 
 /**
@@ -110,7 +111,10 @@ public class FileUploadField extends FormComponent<List<FileUpload>>
 			{
 				for (FileItem item : fileItems)
 				{
-					fileUploads.add(new FileUpload(item));
+					// WICKET-6270 detect empty field by missing file name
+					if (Strings.isEmpty(item.getName()) == false) {
+						fileUploads.add(new FileUpload(item));
+					}
 				}
 			}
 		}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3a6eb04c/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
index bc014f6..989c7f7 100755
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
@@ -56,7 +56,6 @@ import org.apache.wicket.util.encoding.UrlDecoder;
 import org.apache.wicket.util.encoding.UrlEncoder;
 import org.apache.wicket.util.file.File;
 import org.apache.wicket.util.io.IOUtils;
-import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.upload.FileUploadBase;
@@ -245,19 +244,19 @@ public class MockHttpServletRequest implements HttpServletRequest
 	 */
 	public void addFile(String fieldName, File file, String contentType)
 	{
-		Args.notNull(file, "file");
-
-		if (file.exists() == false)
-		{
-			throw new IllegalArgumentException(
-				"File does not exists. You must provide an existing file: " +
-					file.getAbsolutePath());
-		}
+		if (file != null) {
+			if (file.exists() == false)
+			{
+				throw new IllegalArgumentException(
+					"File does not exists. You must provide an existing file: "
+						+ file.getAbsolutePath());
+			}
 
-		if (file.isFile() == false)
-		{
-			throw new IllegalArgumentException(
-				"You can only add a File, which is not a directory. Only files can be uploaded.");
+			if (file.isFile() == false)
+			{
+				throw new IllegalArgumentException(
+					"You can only add a File, which is not a directory. Only files can be uploaded.");
+			}
 		}
 
 		if (uploadedFiles == null)
@@ -1652,7 +1651,9 @@ public class MockHttpServletRequest implements HttpServletRequest
 						out.write("; name=\"".getBytes());
 						out.write(fieldName.getBytes());
 						out.write("\"; filename=\"".getBytes());
-						out.write(uf.getFile().getName().getBytes());
+						if (uf.getFile() != null) {
+							out.write(uf.getFile().getName().getBytes());
+						}
 						out.write("\"".getBytes());
 						out.write(crlf.getBytes());
 						out.write("Content-Type: ".getBytes());
@@ -1660,16 +1661,18 @@ public class MockHttpServletRequest implements HttpServletRequest
 						out.write(crlf.getBytes());
 						out.write(crlf.getBytes());
 
-						// Load the file and put it into the the inputstream
-						FileInputStream fis = new FileInputStream(uf.getFile());
-
-						try
-						{
-							IOUtils.copy(fis, out);
-						}
-						finally
-						{
-							fis.close();
+						if (uf.getFile() != null) {
+							// Load the file and put it into the the inputstream
+							FileInputStream fis = new FileInputStream(uf.getFile());
+
+							try
+							{
+								IOUtils.copy(fis, out);
+							}
+							finally
+							{
+								fis.close();
+							}
 						}
 						out.write(crlf.getBytes());
 					}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3a6eb04c/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
index 1257648..f14b8d0 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
@@ -657,7 +657,7 @@ public class FormTester
 	 *            <code>FormComponent</code>. The <code>FormComponent</code> must be of a type
 	 *            <code>FileUploadField</code>.
 	 * @param file
-	 *            the <code>File</code> to upload.
+	 *            the <code>File</code> to upload or {@code null} for an empty input
 	 * @param contentType
 	 *            the content type of the file. Must be a valid mime type.
 	 * @return This

http://git-wip-us.apache.org/repos/asf/wicket/blob/3a6eb04c/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
index a9f6c51..d1f06b7 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
@@ -128,22 +128,51 @@ public class FileUploadFieldTest extends WicketTestCase
 
 	/** 
 	 * https://issues.apache.org/jira/browse/WICKET-5691
-	 * 
-	 * */
+	 */
 	@Test
 	public void testEmptyField() throws Exception
 	{
 		tester.startPage(TestValidationPage.class);
 		
+		FileUploadField uploadField = (FileUploadField)tester.getComponentFromLastRenderedPage("form:upload");
+		uploadField.add(new IValidator<List<FileUpload>>() {
+			@Override
+			public void validate(IValidatable<List<FileUpload>> validatable)
+			{
+				// must check during validation, since the uploads are nullified on detach
+				assertEquals(0, validatable.getValue().size());
+			}
+		});
 		FormTester formtester = tester.newFormTester("form");
 		formtester.submit();
 		
-		FileUploadField fileUploadField = (FileUploadField)tester.getComponentFromLastRenderedPage("form:upload");
-		
-		assertEquals(0, fileUploadField.getFileUploads().size());
+		tester.assertNoErrorMessage();
+	}
+
+	/** 
+	 * https://issues.apache.org/jira/browse/WICKET-6270
+	 */
+	@Test
+	public void testEmptyFieldAsBrowserSendsIt() throws Exception
+	{
+		tester.startPage(TestValidationPage.class);
+
+		FileUploadField uploadField = (FileUploadField)tester.getComponentFromLastRenderedPage("form:upload");
+		uploadField.add(new IValidator<List<FileUpload>>() {
+			@Override
+			public void validate(IValidatable<List<FileUpload>> validatable)
+			{
+				// must check during validation, since the uploads are nullified on detach
+				assertEquals(0, validatable.getValue().size());
+			}
+		});
+		FormTester formtester = tester.newFormTester("form");
+		formtester.setFile("upload", null, "text/xml");
+		formtester.submit();
+
+		tester.assertNoErrorMessage();
 	}
 
-	
 	public static class TestValidationPage extends MockPageWithFormAndUploadField
 	{
 		/** */