Hello,
Peter N. Lundblad wrote:
> On Fri, 5 Nov 2004, Uwe Zeisberger wrote:
> > if I issue the command
> >
> > svn log file:///
> >
> > (in a wc or not) I get:
> >
> > Assertion failed: is_canonical (path, len), file [..]/subversion/libsvn_subr/path.c, line 376
> > Abort
> >
> > I think file:/// is a valid url standing for '/'. (Please correct me, if
> > I'm wrong.)
> >
> > If file:/// is a valid (and canonical) path, is_canonical
> > (defined in path.c, line 95+) returns a wrong result (namely false).
> >
> Yes, it should skip the scheme and host parts before treating it like a
> path.
>
> Also, svn_path_canonicalize is buggy in that it strips the trailing slash
> in this case.
From RFC 1738 Section 3.1:
... common syntax for the scheme-specific data:
//<user>:<password>@<host>:<port>/<url-path>
[...] "/<url-path>" may be excluded.
So "file://" and "file:///" are the same. Stripping a slash from
"file://" (as svn_path_canonicalize does) is however an error.
I attach a patch, which let subversion accept "file://".
I didn't change the assertions, which assume, that a canonical pathname
does not end with a slash. `svn log file:///' doesn't fail with an
assertion any more and I didn't found an other way to provoke this
failure, yet. I believe, there is still work to be done.
Heres the log:
[[[
Fix a part from issue #2116: 'svn log file:///' results in a failed assertion
These changes add the correct handling for "file://"
* subversion/libsvn_subr/path.c
(skip_uri_schema): also find :// at the end of path
(svn_path_canonicalize): don't strip a leading slash from "file://"
* subversion/libsvn_ra_local/split_url.c
(svn_ra_local__split_URL): handle "file://" correctly
* subversion/tests/libsvn_subr/path-test.c
(test_is_url): add "file:///" -> TRUE, "file://" -> TRUE and
"file:/" -> FALSE
(test_canonicalize): add "file:///" -> "file://", "file://" ->
"file://", "file:///usr/" -> "file:///usr", "file:///usr" -> "file:///usr"
]]]
--
Uwe Zeisberger
http://www.google.com/search?q=i+squared
Received on Tue Nov 16 17:08:11 2004