2006-06-22 Anders Carlsson <acarlsson@apple.com>
Reviewed by Maciej.
<rdar://problem/
4524840> Entities contained in DOCTYPE referenced DTD in XSLT source document are unknown
* dom/xml_tokenizer.cpp:
(WebCore::shouldAllowExternalLoad):
Use correct path for the catalog.
(WebCore::errorFunc):
Add error function to keep parser errors from going to the console.
(WebCore::XMLTokenizer::write):
Remove if (0 &&)
(WebCore::XMLTokenizer::end):
Pass DocLoader to xmlDocPtrForString.
(WebCore::xmlDocPtrForString):
* dom/xml_tokenizer.h:
Add DocLoader argument to xmlDocPtrForString so external DTDs and entities can be loaded.
* xml/XSLTProcessor.cpp:
(WebCore::xmlDocPtrFromNode):
Pass DocLoader to xmlDocPtrForString
LayoutTests:
2006-06-22 Anders Carlsson <acarlsson@apple.com>
Reviewed by Maciej.
<rdar://problem/
4524840> Entities contained in DOCTYPE referenced DTD in XSLT source document are unknown
* fast/xsl/dtd-in-source-document-expected.txt: Added.
* fast/xsl/dtd-in-source-document.xml: Added.
* fast/xsl/resources/dtd-in-source-document.dtd: Added.
* fast/xsl/resources/dtd-in-source-document.xsl: Added.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@14973
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2006-06-22 Anders Carlsson <acarlsson@apple.com>
+
+ Reviewed by Maciej.
+
+ <rdar://problem/4524840> Entities contained in DOCTYPE referenced DTD in XSLT source document are unknown
+
+ * fast/xsl/dtd-in-source-document-expected.txt: Added.
+ * fast/xsl/dtd-in-source-document.xml: Added.
+ * fast/xsl/resources/dtd-in-source-document.dtd: Added.
+ * fast/xsl/resources/dtd-in-source-document.xsl: Added.
+
2006-06-21 Justin Garcia <justin.garcia@apple.com>
Reviewed by levi
--- /dev/null
+This tests that entities defined in an external DTD referenced to from the source document are replaced correctly. If this test is successful, the text SUCCESS should be shown below.
+SUCCESS
+
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE xml SYSTEM "resources/dtd-in-source-document.dtd">
+<?xml-stylesheet type="text/xsl" href="resources/dtd-in-source-document.xsl"?>
+<TEST>&Result;</TEST>
--- /dev/null
+<!ENTITY Result "SUCCESS">
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output method="html" encoding="UTF-8" />
+ <xsl:template match="/TEST">
+
+<html>
+<head>
+ <script>
+ if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+ </script>
+</head>
+<body>
+<div>This tests that entities defined in an external DTD referenced to from the source document are replaced correctly.
+If this test is successful, the text SUCCESS should be shown below.</div>
+<div><xsl:value-of select="."/></div>
+</body>
+</html>
+</xsl:template>
+</xsl:stylesheet>
+2006-06-22 Anders Carlsson <acarlsson@apple.com>
+
+ Reviewed by Maciej.
+
+ <rdar://problem/4524840> Entities contained in DOCTYPE referenced DTD in XSLT source document are unknown
+
+ * dom/xml_tokenizer.cpp:
+ (WebCore::shouldAllowExternalLoad):
+ Use correct path for the catalog.
+
+ (WebCore::errorFunc):
+ Add error function to keep parser errors from going to the console.
+
+ (WebCore::XMLTokenizer::write):
+ Remove if (0 &&)
+
+ (WebCore::XMLTokenizer::end):
+ Pass DocLoader to xmlDocPtrForString.
+
+ (WebCore::xmlDocPtrForString):
+ * dom/xml_tokenizer.h:
+ Add DocLoader argument to xmlDocPtrForString so external DTDs and entities can be loaded.
+
+ * xml/XSLTProcessor.cpp:
+ (WebCore::xmlDocPtrFromNode):
+ Pass DocLoader to xmlDocPtrForString
+
2006-06-21 David Hyatt <hyatt@apple.com>
Back out -webkit-overlay and just rename it back to overlay.
FAE04190097596C9000540BE /* SVGImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE0418E097596C9000540BE /* SVGImageLoader.h */; };
/* End PBXBuildFile section */
-/* Begin PBXBuildStyle section */
- 4EE83C610A4A0E2600C3AAA3 /* Development */ = {
- isa = PBXBuildStyle;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- };
- name = Development;
- };
- 4EE83C620A4A0E2600C3AAA3 /* Deployment */ = {
- isa = PBXBuildStyle;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- };
- name = Deployment;
- };
-/* End PBXBuildStyle section */
-
/* Begin PBXContainerItemProxy section */
DD041FF009D9E3250010AF2A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject "WebCore" */;
- buildSettings = {
- };
- buildStyles = (
- 4EE83C610A4A0E2600C3AAA3 /* Development */,
- 4EE83C620A4A0E2600C3AAA3 /* Deployment */,
- );
hasScannedForEncodings = 1;
knownRegions = (
English,
#include <libxml/parserInternals.h>
#include <wtf/Vector.h>
+#ifdef KHTML_XSLT
+#include <libxslt/xslt.h>
+#endif
+
#if SVG_SUPPORT
#include "SVGNames.h"
#include "XLinkNames.h"
static bool shouldAllowExternalLoad(const char* inURI)
{
DeprecatedString url(inURI);
- if (url.contains("/etc/catalog")
+
+ if (url.contains("/etc/xml/catalog")
|| url.startsWith("http://www.w3.org/Graphics/SVG")
|| url.startsWith("http://www.w3.org/TR/xhtml"))
return false;
return 0;
}
+static void errorFunc(void*, const char*, ...)
+{
+ // FIXME: It would be nice to display error messages somewhere.
+}
+
void setLoaderForLibXMLCallbacks(DocLoader *docLoader)
{
globalDocLoader = docLoader;
if (m_parserStopped || m_sawXSLTransform)
return false;
- if (0 && m_parserPaused) {
+ if (m_parserPaused) {
m_pendingSrc.append(s);
return false;
}
void XMLTokenizer::end()
{
if (m_sawXSLTransform) {
- m_doc->setTransformSource(xmlDocPtrForString(m_originalSourceForTransform, m_doc->URL()));
+ m_doc->setTransformSource(xmlDocPtrForString(m_doc->docLoader(), m_originalSourceForTransform, m_doc->URL()));
m_doc->setParsing(false); // Make the doc think it's done, so it will apply xsl sheets.
m_doc->updateStyleSelector();
}
#ifdef KHTML_XSLT
-void *xmlDocPtrForString(const DeprecatedString &source, const DeprecatedString &url)
+void *xmlDocPtrForString(DocLoader* docLoader, const DeprecatedString &source, const DeprecatedString &url)
{
if (source.isEmpty())
return 0;
// good error messages.
const QChar BOM(0xFEFF);
const unsigned char BOMHighByte = *reinterpret_cast<const unsigned char *>(&BOM);
+
+ xmlGenericErrorFunc oldErrorFunc = xmlGenericError;
+ void* oldErrorContext = xmlGenericErrorContext;
+
+ setLoaderForLibXMLCallbacks(docLoader);
+ xmlSetGenericErrorFunc(0, errorFunc);
+
xmlDocPtr sourceDoc = xmlReadMemory(reinterpret_cast<const char *>(source.unicode()),
source.length() * sizeof(QChar),
url.ascii(),
BOMHighByte == 0xFF ? "UTF-16LE" : "UTF-16BE",
- XML_PARSE_NOCDATA|XML_PARSE_DTDATTR|XML_PARSE_NOENT);
+ XSLT_PARSE_OPTIONS);
+
+ setLoaderForLibXMLCallbacks(0);
+ xmlSetGenericErrorFunc(oldErrorContext, oldErrorFunc);
+
return sourceDoc;
}
#endif
Tokenizer* newXMLTokenizer(Document*, FrameView* = 0);
#if KHTML_XSLT
-void* xmlDocPtrForString(const DeprecatedString& source, const DeprecatedString& URL);
+void* xmlDocPtrForString(DocLoader*, const DeprecatedString& source, const DeprecatedString& URL);
void setLoaderForLibXMLCallbacks(DocLoader*);
#endif
HashMap<String, String> parseAttributes(const String&, bool& attrsOK);
if (sourceIsDocument)
sourceDoc = (xmlDocPtr)ownerDocument->transformSource();
if (!sourceDoc) {
- sourceDoc = (xmlDocPtr)xmlDocPtrForString(createMarkup(sourceNode), sourceIsDocument ? ownerDocument->URL() : DeprecatedString());
+ sourceDoc = (xmlDocPtr)xmlDocPtrForString(ownerDocument->docLoader(), createMarkup(sourceNode), sourceIsDocument ? ownerDocument->URL() : DeprecatedString());
shouldDelete = (sourceDoc != 0);
}
return sourceDoc;