Repository: wicket Updated Branches: refs/heads/wicket-7.x 423a93f20 -> 34d8ead09
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/34d8ead0 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/34d8ead0 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/34d8ead0 Branch: refs/heads/wicket-7.x Commit: 34d8ead0926269af5392d8d55cc2a001e9c3ecc3 Parents: 423a93f Author: Sven Meier <[email protected]> Authored: Mon Nov 7 19:20:07 2016 +0100 Committer: Sven Meier <[email protected]> Committed: Mon Nov 7 19:21:03 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/34d8ead0/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 e604fae..5a8f288 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 @@ -27,6 +27,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; /** * Form component that corresponds to a <input type="file">. When a FileInput @@ -111,7 +112,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/34d8ead0/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 a7bd476..05c5c1b 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 @@ -65,7 +65,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.value.ValueMap; @@ -255,19 +254,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) @@ -1706,7 +1705,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()); @@ -1714,16 +1715,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/34d8ead0/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 91c8890..91bde51 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 @@ -656,7 +656,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/34d8ead0/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 7f17962..7454602 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 { /** */
