Skip to content

Uncatched case in file existence check of SourceFile #14664

Closed
@chikei

Description

@chikei

Compiler version

3.0.0 and 3.1.0

Minimized code

here and here (and I believe later is what occurs in this Ammonite issue) assumes JVM always throw NoSuchFileException when path is not exist, but that's not the case under linux if 1. path start with directory and 2. the directory name exists in filesystem as a file

the code assumed:

$ file test
test: cannot open `test' (No such file or directory)
scala> java.nio.file.Files.newInputStream(java.nio.file.Paths.get("test/test.scala"))
java.nio.file.NoSuchFileException: test/test.scala
  at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
  at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
  at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
  at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
  at java.base/java.nio.file.Files.newByteChannel(Files.java:380)
  at java.base/java.nio.file.Files.newByteChannel(Files.java:432)
  at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:422)
  at java.base/java.nio.file.Files.newInputStream(Files.java:160)
  ... 28 elided

or

$ mkdir test
$ ./scala
scala> java.nio.file.Files.newInputStream(java.nio.file.Paths.get("test/test.scala"))
java.nio.file.NoSuchFileException: test/test.scala
  at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
  at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
  at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
  at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
  at java.base/java.nio.file.Files.newByteChannel(Files.java:380)
  at java.base/java.nio.file.Files.newByteChannel(Files.java:432)
  at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:422)
  at java.base/java.nio.file.Files.newInputStream(Files.java:160)
  ... 28 elided

and the uncatched case:

$ rmdir test
$ touch test
scala> java.nio.file.Files.newInputStream(java.nio.file.Paths.get("test/test.scala"))
java.nio.file.FileSystemException: test/test.scala: Not a directory
  at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)
  at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
  at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
  at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
  at java.base/java.nio.file.Files.newByteChannel(Files.java:380)
  at java.base/java.nio.file.Files.newByteChannel(Files.java:432)
  at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:422)
  at java.base/java.nio.file.Files.newInputStream(Files.java:160)
  ... 28 elided

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions