summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDavid Rothstein <drothstein@gmail.com>2015-10-11 15:22:24 -0400
committerDavid Rothstein <drothstein@gmail.com>2015-10-11 15:22:24 -0400
commit6379101933142e2eeaea2f4eb41f4d32a9e47531 (patch)
tree147f757fdea5c307904005018eb0c6f9d28b646c /modules
parentf7548361a664b6cb2fffc4e23a2a1a6620addd80 (diff)
downloadbrdo-6379101933142e2eeaea2f4eb41f4d32a9e47531.tar.gz
brdo-6379101933142e2eeaea2f4eb41f4d32a9e47531.tar.bz2
Issue #2511306 by ElusiveMind, JeroenT, leolando.tan, cilefen, charginghawk: Error: Call to a member function getElementsByTagName() in filter.module when filter_dom_serialize() is passed an empty document.
Diffstat (limited to 'modules')
-rw-r--r--modules/filter/filter.module23
-rw-r--r--modules/filter/filter.test23
2 files changed, 37 insertions, 9 deletions
diff --git a/modules/filter/filter.module b/modules/filter/filter.module
index f4bab9e6b..83876808b 100644
--- a/modules/filter/filter.module
+++ b/modules/filter/filter.module
@@ -1119,18 +1119,23 @@ function filter_dom_serialize($dom_document) {
$body_node = $dom_document->getElementsByTagName('body')->item(0);
$body_content = '';
- foreach ($body_node->getElementsByTagName('script') as $node) {
- filter_dom_serialize_escape_cdata_element($dom_document, $node);
- }
+ if ($body_node !== NULL) {
+ foreach ($body_node->getElementsByTagName('script') as $node) {
+ filter_dom_serialize_escape_cdata_element($dom_document, $node);
+ }
- foreach ($body_node->getElementsByTagName('style') as $node) {
- filter_dom_serialize_escape_cdata_element($dom_document, $node, '/*', '*/');
- }
+ foreach ($body_node->getElementsByTagName('style') as $node) {
+ filter_dom_serialize_escape_cdata_element($dom_document, $node, '/*', '*/');
+ }
- foreach ($body_node->childNodes as $child_node) {
- $body_content .= $dom_document->saveXML($child_node);
+ foreach ($body_node->childNodes as $child_node) {
+ $body_content .= $dom_document->saveXML($child_node);
+ }
+ return preg_replace('|<([^> ]*)/>|i', '<$1 />', $body_content);
+ }
+ else {
+ return $body_content;
}
- return preg_replace('|<([^> ]*)/>|i', '<$1 />', $body_content);
}
/**
diff --git a/modules/filter/filter.test b/modules/filter/filter.test
index ddea6afb5..547118515 100644
--- a/modules/filter/filter.test
+++ b/modules/filter/filter.test
@@ -1983,3 +1983,26 @@ class FilterSettingsTestCase extends DrupalWebTestCase {
}
}
}
+
+/**
+ * Tests DOMDocument serialization.
+ */
+class FilterDOMSerializeTestCase extends DrupalWebTestCase {
+
+ public static function getInfo() {
+ return array(
+ 'name' => 'Serialization',
+ 'description' => 'Test serialization of DOMDocument objects.',
+ 'group' => 'Filter',
+ );
+ }
+
+ /**
+ * Tests empty DOMDocument object.
+ */
+ function testFilterEmptyDOMSerialization() {
+ $document = new DOMDocument();
+ $result = filter_dom_serialize($document);
+ $this->assertEqual('', $result);
+ }
+}