Hi,

there seems to be a problem with the XSLTProcessorImpl which surfaces under
very special circumstances. If an entity catalog is used from within an
included xslt stylesteet, the following situation ensues:

- the XSLTProcessorImpl's resolve method resolves the included stylesheet's
name against a base like "file:/path/to/including/stylesheet".
- due to the way it works, it prepends a leading slash after the colon leading
to a result like "file://path/to/included/stylesheet". This uri is broken,
however, cocoon's SourceResolver is still able to use it.
- the entity catalog used within the included stylesteet is looked up based on
the above uri. This eventually fails as xerces' DefaultReaderFactory creates a
URL from the uri and tries a URL.openStream() leading to a host lookup for
"path" and further mayhem.

This problem seems to be specific to the unix platform (tested under
Linux/JDK1.3) due to the fact that URLs of the style "file:/x:/path/..." work
just like those without the first slash.
The attached patch fixes the problem. I've tested the patched code under
Windows/JDK1.3 and it seems to work fine there as well. However, this patch
should still be reviewed carefully.

Joerg Henne
Index: src/org/apache/cocoon/components/xslt/XSLTProcessorImpl.java
===================================================================
RCS file: 
/home/cvspublic/xml-cocoon2/src/org/apache/cocoon/components/xslt/XSLTProcessorImpl.java,v
retrieving revision 1.5
diff -u -u -r1.5 XSLTProcessorImpl.java
--- src/org/apache/cocoon/components/xslt/XSLTProcessorImpl.java        2001/09/06 
14:04:11     1.5
+++ src/org/apache/cocoon/components/xslt/XSLTProcessorImpl.java        2001/09/12 
+17:37:40
@@ -337,7 +337,7 @@
         else {
           File parent = new File(base.substring(5));
           File parent2 = new File(parent.getParentFile(), href);
-          xslSource = resolver.resolve("file:/" + parent2.getAbsolutePath());
+          xslSource = resolver.resolve("file:" + parent2.getAbsolutePath());
         }
       }
       InputSource is = xslSource.getInputSource();

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to