Something just "bit me" with XSLT displayed pages from mod_dav_svn.
I say that in quotes as I had already had worked around the problem,
before I even knew about it, for other reasons.
Anyway, the problem is that the ":" character is not escaped in the
"href" attribute of the file and directory elements.
This is a problem as the ":" character is a special character that
separates protocol from port within a URL and thus must be escaped
if it is not serving in that manner.
Thus, the mod_dav_svn XML output below would fail to correctly
link to the file "TestCase-:-.txt" as the browser would complain
about the protocol.
Other special characters are correctly escaped as far as I can see.
When looking at the code, it seems that this is a non-trivial change
since the escaping happens within Apache and that it is a general URI
escaper. Thus, the net result is that it does not know if the ":" should
be escaped or not (given that it could be part of the "http://" or part
of the "host:port" string)
The code that does this is generated by the server/gen_test_char.c within
Apache. Since mod_dav_svn uses ap_escape_uri() which is actually a
define to ap_os_escape_path() which looks at the T_OS_ESCAPE_PATH flag
in the table.
The file server/gen_test_char.c generates the table.
Maybe this is one case where some other method would need to be used
since the href field is always just a relative path?
So, I did not make a patch for this (yet) as I would like to get some
input as to the best way to go. I think this could be handled via a
special case on top of the Apache escaping - since I don't know if there
would be a reasonable way to change Apache on this issue.
-----------------------------output from mod_dav_svn---------------------------
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/insurrection.xsl"?>
<!DOCTYPE svn [
<!ELEMENT svn (index)>
<!ATTLIST svn version CDATA #REQUIRED
href CDATA #REQUIRED>
<!ELEMENT index (updir?, (file | dir)*)>
<!ATTLIST index name CDATA #IMPLIED
path CDATA #IMPLIED
rev CDATA #IMPLIED>
<!ELEMENT updir EMPTY>
<!ELEMENT file (prop)*>
<!ATTLIST file name CDATA #REQUIRED
href CDATA #REQUIRED>
<!ELEMENT dir (prop)*>
<!ATTLIST dir name CDATA #REQUIRED
href CDATA #REQUIRED>
<!ELEMENT prop (#PCDATA)>
<!ATTLIST prop name CDATA #REQUIRED>
]>
<svn version="1.2.3 (r15833)"
href="http://subversion.tigris.org/">
<index rev="31" path="/trunk/tests/TestCase-:-">
<updir />
<file name="TestCase-:-.txt" href="TestCase-:-.txt"></file>
<file name="test.txt" href="test.txt"></file>
</index>
</svn>
--
Michael Sinz Technology and Engineering Director/Consultant
"Starting Startups" mailto:michael.sinz@sinz.org
My place on the web http://www.sinz.org/Michael.Sinz
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Fri Oct 21 23:21:47 2005