What I mean is that for “honest” software, built-in to the OS or otherwise, the programmer finds a situation where they take some user-supplied input and concatenate that into a path, and call something like OS.read(). If they want to prevent the user from causing havoc, they now find themselves dealing with path validation in their software instead of calling OS.safeOpen(), which would be a reduced subset of allowed chars?
If the OS is working properly, the havoc should just result in "permission denied."
If there's a path on the system that the user should not be able to read, that's the job of the OS to handle, not the individual applications.