You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Elliotte Rusty Harold (Jira)" <ji...@apache.org> on 2024/01/01 12:27:00 UTC

[jira] [Commented] (IO-807) FileUtils.requireExists does not take into account soft links

    [ https://issues.apache.org/jira/browse/IO-807?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17801538#comment-17801538 ] 

Elliotte Rusty Harold commented on IO-807:
------------------------------------------

I'm exploring this and it looks like it is not true that "as `FileUtils#requireFileIfExists` returns `false`, the file is just ignored." In fact the current behavior when encountering a broken link, with or without LinkOption.NOFOLLOW_LINKS, is to throw a FileNotFoundException.

> FileUtils.requireExists does not take into account soft links
> -------------------------------------------------------------
>
>                 Key: IO-807
>                 URL: https://issues.apache.org/jira/browse/IO-807
>             Project: Commons IO
>          Issue Type: Improvement
>          Components: Utilities
>    Affects Versions: 2.13.0
>            Reporter: Jordi Sola
>            Priority: Major
>
> The current sources for `FileUtils.requireExists` and `FileUtils.
> requireExistsChecked` just check for the existence of the file, delegating to the `File.exists` method:
> {code:java}
>         Objects.requireNonNull(file, fileParamName);
>         if (!file.exists()) {
>             throw ...
>         }
>         return file;{code}
> The default `file` implementation returns `false` if the file is a broken symbolic link (that is, a symbolic link pointing to an non-existing file).
> While this implementation can be seen as correct most of the time, sometimes we need to avoid following the link, and evaluate the existence of the link itself.
> For example, when using `FileUtils#copyDirectory` with the 
> `LinkOption.NOFOLLOW_LINKS` option, it is expected that broken links are copied (see JavaDocs for `java.nio.file.Files#copy`). Nonetheless, as `FileUtils#requireFileIfExists` returns `false`, the file is just ignored.
>  
> One possible approach is relying in `java.nio.file.Files#isSymbolicLink` when `LinkOption.NOFOLLOW_LINKS` options is provided.
>  



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