what does the spec say about file paths that are too long?
Alan Bateman
Alan.Bateman at oracle.com
Thu Aug 26 10:39:59 UTC 2021
On 25/08/2021 23:12, Alan Snyder wrote:
> Lacking any new data, I guess it is fair to assume that there is no specification for the behavior of methods that use file paths that are too long, and presumably no tests, either.
>
> So the next question is whether there should be such a specification.
>
> I think there should be a specification because I would like to be able to use file paths without having to defend against possible unwanted bad effects when the paths are too long. By analogy, more like array indexing than integer overflow.
>
> If there is to be a specification, should it be at the method level? That would be best, I think.
>
> For example, the Path.toAbsolutePath() method in principle could return a path that is “too long” even if the original path is fine. Should an exception be raised at that point or only when the absolute path is used? This distinction was not possible with File, but it may be possible with Path, given the association with file providers.
>
> (Regarding the comment from Alan B., is it the case that file paths are necessarily resolved before use? That would surprise me.)
As I said, you should see an I/O exception if you attempt to access the
file system with a file path that is too long to locate a file. There
are a couple of APIs that return a boolean rather than throw and they
should all fail (usually by returning false) if the file path is too
long. If you do find a case where you think the file path is "silently
truncated" then please bring it up so we can see if this is a JDK or
operating system issue. There was some exploration, in the JDK 7 time
frame, into defining APIs that expose limits but it gets unapproachable
very quickly due to handling by specific operating systems and
encoding/normalization at the low-level file system level.
I see your other mails asking if resolving or combining paths should
fail. That is not feasible in general. Bernd mentioned some of the
issues. If you add sym or hard links to the discussion then you will
quickly see that you don't actually know which file system or file will
be accessed until you attempt the access. You also mentioned being
surprised that the JDK may have to "resolve" paths. It has to in some
cases, the most obvious being long paths on Windows that need
transformation and a prefix to order to generate the file path for the
Windows call.
-Alan.
More information about the core-libs-dev
mailing list