The documentation for File.isFile [1] reads:

"Tests whether the file denoted by this abstract pathname is a normal file."

/dev/null is not a normal file. It is a special file used to write
bytes without error. So use of this file would be under special
circumstances and is not something expected for the common use case of
FileUtils.

Note that you can write to this file using the latest master version
of IO (2.12.0-SNAPSHOT) since this works (and prints false):

    @Test
    void testDevNull() throws IOException {
      File f = new File("/dev/null");
      System.out.println(f.isFile());
      FileUtils.write(f, "hello", StandardCharsets.UTF_8);
    }

So this is not the source of error in your test.

You mention the error is raised in the method FileUtils.requireFile.
This is a private method that is used in the following public methods:

checksum(File, Checksum)
contentEquals(File, File)
contentEqualsIgnoreEOL(File, File, String)
copyFile(File, File, CopOption...)
moveFile(File, File, CopOption...)
openOutputStream(File, boolean)

So perhaps you are using one of these methods (or one that calls them)
in your tests. You should be able to view the stacktrace and see the
origin of the error. If your test is using /dev/null as a sink for
data that you do not care about then in this case you can create a
temp file in your test and use that as your destination. Then delete
your temp file at the end of the test. This will at least ensure that
all bytes are consumed by the destination file, even if you do not
wish to validate that in your test.

If you have code that wishes to output to a file or optionally ignore
output then you can use one of the objects that acts like /dev/null,
e.g. NullAppendable, NullOutputStream, NullPrintStream or NullWriter.

Regards,

Alex

[1] https://docs.oracle.com/javase/8/docs/api/java/io/File.html#isFile--

On Mon, 17 Oct 2022 at 10:45, ABHISHEK DAS GUPTA <15ucs...@lnmiit.ac.in> wrote:
>
> Hello,
>  We are currently addressing commons io CVE where we need to upgrade it
> from 2.4 to 2.11.0 . After the upgrade,  one of our UTs is failing with
> "Parameter 'file' is not a file: /dev/null" . Within the codeflow of the
> test there is a call to FileUtils.write( File("/dev/null"),  char sequence)
> and the code fails here after this method call.  We digged inside the
> internal of this method and analyzed the difference b/w 2.4 and 2.11.0.
> There is a difference b/w the flow and we traced it back to the following
> commit.
> <https://github.com/apache/commons-io/commit/0cee29aa4c1818963ed1a55058219282e89d7488?diff=split>
> There
> is a check
> <https://github.com/apache/commons-io/blob/7264b2607235065aef98f12ee0e3c0d3586b9b49/src/main/java/org/apache/commons/io/FileUtils.java#L2809>
> to see whether /dev/null is a file or not.  This returns false.
> Please let us know how to proceed to fix this issue and if you can provide
> a reason also why this is failing?
>
> Best
> Abhishek

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
For additional commands, e-mail: user-h...@commons.apache.org

Reply via email to