[ 
https://issues.apache.org/jira/browse/FILEUPLOAD-362?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gary D. Gregory updated FILEUPLOAD-362:
---------------------------------------
    Assignee: Gary D. Gregory

> Unable to parse requests for file uploads with special characters in filename 
> on Windows
> ----------------------------------------------------------------------------------------
>
>                 Key: FILEUPLOAD-362
>                 URL: https://issues.apache.org/jira/browse/FILEUPLOAD-362
>             Project: Commons FileUpload
>          Issue Type: Bug
>    Affects Versions: 2.0.0-M1
>            Reporter: Kusal Kithul-Godage
>            Assignee: Gary D. Gregory
>            Priority: Major
>
> [This 
> commit|https://github.com/apache/commons-fileupload/commit/63e243fe8ded60a5d40659db8226a9f5ea43fd88#diff-96321c47e1a58f258784f31b899d0ae2789fb234197b65f92032fca540762aeaR111]
>  introduced an additional {{Paths#get}} call during file name validation. 
> Previously, it only checked for NUL characters, but now it also checks that 
> the filename is valid for the OS that the Java application is running on. 
> This means a web server running on Windows is unable to accept file uploads 
> where the original filename has special characters (e.g. from Unix-based 
> clients where it is valid).
> As far as I know, the multipart field's filename value is simply informative 
> and isn't used to actually write a file to disk - and so there shouldn't be 
> any need for commons-fileupload to check it is a valid filename on the server 
> OS (and in any case, it should not forcibly reject it). Any OS-specific 
> implications of the original filename should be the consuming code's 
> responsibility.
> I'm not aware of any way to disable or override this new validation 
> behaviour. The JavaDoc for 
> {{org.apache.commons.fileupload2.core.DiskFileItem#getName}} suggests 
> catching the {{InvalidPathException}} to retrieve the original filename if 
> desired; however, this is not practical in the scenario where 
> {{org.apache.commons.fileupload2.core.AbstractFileUpload#parseRequest}} is 
> being called and the exception is thrown within its calling code.
> Sample request for reproduction (server should be running on Windows):
> {code:java}
> curl -X POST "http://localhost/endpoint"; -F 
> "file=content;filename=file?name.txt;type=text/plain"{code}
> Stack trace:
> {code:java}
> java.nio.file.InvalidPathException: Illegal char <?> at index 4: file?name.txt
>   at 
> java.base/sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:204)
>   at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:175)
>   at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
>   at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
>   at 
> java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:231)
>   at java.base/java.nio.file.Path.of(Path.java:148)
>   at java.base/java.nio.file.Paths.get(Paths.java:69)
>   at 
> org.apache.commons.fileupload2.core.DiskFileItem.checkFileName(DiskFileItem.java:166)
>   at 
> org.apache.commons.fileupload2.core.FileItemInputImpl.getName(FileItemInputImpl.java:183)
>   at 
> org.apache.commons.fileupload2.core.AbstractFileUpload.lambda$parseRequest$1(AbstractFileUpload.java:478)
>   at 
> org.apache.commons.io.function.IOIterator.forEachRemaining(IOIterator.java:77)
>   at 
> org.apache.commons.fileupload2.core.AbstractFileUpload.parseRequest(AbstractFileUpload.java:467)
>   at 
> org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload.parseRequest(JakartaServletFileUpload.java:116){code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to