On 14/01/2013 3:24 PM, Stephan Mueller wrote:
Perhaps (as you may well have already considered):

- replace the path prefix by the mount point first?  (this may be naïve
   on my part, but it's not clear to me that .. early in a path should be able
   to influence which mount point is substituted)
If I mount something at /foo/bar/baz, then /foo/bar/baz/../../blah definitely shouldn't end up inside baz.

- test directory existence of the component preceding .. before collapsing
   (in the example above) b/.. to nothing.
- trust that for a/b3/b2/b/../../../c, the existence test of a/b3/b2/b
   before collapsing b/.. to nothing implies existence of b2 and b3 so no
   further tests are needed for 'runs' of .. components with enough
   components before them

Understood that this is still going to cause a slowdown because paths with
.. are not uncommon, but it would reduce the number of additional
existence checks from one-per-path-component to one-per-run-of-..,
which means none in the case of paths without .. in them.
The rest seems totally reasonable to me, FWIW.

I wouldn't put it past a Makefile (esp. one generated by autotools) or a gcc header search path to generate paths like: /a/b/c/d/../e/../f/../../../g/h (which resolves to a/g/h, if I counted dots correctly). Even then, though, it's "only" three checks to achieve posix-compliant behavior.

Ryan


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Reply via email to