Commit f17b77dc authored by Joey Arhar's avatar Joey Arhar Committed by Commit Bot

Avoid dcheck for invalid xslt encoding

When the encoding attribute of an <xsl:output> tag is not a valid
encoding according to WTF::TextEncoding, this dcheck is hit:
https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/dom/document.cc;l=6499;drc=2f11470d7ad8963a9add116df64d2edd1b85d3a4?originalUrl=https:%2F%2Fcs.chromium.org%2F

This patch avoids hitting that dcheck by skipping the call to
Document::SetEncodingData when the encoding is not valid.

Bug: 1077182
Change-Id: I5a21010ff01af5d0fda4932b121e6c21e50b2058
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2208290
Commit-Queue: Joey Arhar <jarhar@chromium.org>
Reviewed-by: default avatarMason Freed <masonfreed@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#770654}
parent cfb8869d
......@@ -35,6 +35,7 @@
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/html/html_document.h"
#include "third_party/blink/renderer/core/html/html_frame_owner_element.h"
#include "third_party/blink/renderer/core/inspector/console_message.h"
#include "third_party/blink/renderer/core/xml/document_xslt.h"
#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
#include "third_party/blink/renderer/platform/wtf/assertions.h"
......@@ -102,11 +103,19 @@ Document* XSLTProcessor::CreateDocumentFromSource(
.WithTypeFrom(mime_type)
.WithContextDocument(owner_document->ContextDocument());
Document* document = DOMImplementation::createDocument(init);
DocumentEncodingData data;
data.SetEncoding(source_encoding.IsEmpty()
? UTF8Encoding()
: WTF::TextEncoding(source_encoding));
document->SetEncodingData(data);
auto parsed_source_encoding = source_encoding.IsEmpty()
? UTF8Encoding()
: WTF::TextEncoding(source_encoding);
if (parsed_source_encoding.IsValid()) {
DocumentEncodingData data;
data.SetEncoding(parsed_source_encoding);
document->SetEncodingData(data);
} else {
document_->AddConsoleMessage(MakeGarbageCollected<ConsoleMessage>(
mojom::blink::ConsoleMessageSource::kXml,
mojom::blink::ConsoleMessageLevel::kWarning,
String("Document encoding not valid: ") + source_encoding));
}
document->SetContent(document_source);
return document;
}
......
CONSOLE WARNING: line 25: Document encoding not valid: bad-encoding
PASS: renderer didn't crash
<body>
<script>
if (window.testRunner)
testRunner.dumpAsText();
</script>
<script id=o_xml type="text/plain">
<?xml version="1.0" encoding="UTF-8"?>
</script>
<script id=o_xslt type="text/plain"><?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="no" omit-xml-declaration="no" encoding="bad-encoding" standalone="yes" />
</xsl:transform>
</script>
<script>
addEventListener("load", function() {
const doc = new DOMParser();
const xml = doc.parseFromString(o_xml.textContent, "text/xml");
const xsl = doc.parseFromString(o_xslt.textContent, "text/xml");
const xsltPrs = new XSLTProcessor();
xsltPrs.importStylesheet(xsl);
xsltPrs.transformToDocument(xml);
document.body.appendChild(document.createTextNode("PASS: renderer didn't crash"));
});
</script>
</body>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment