diff options
author | David Rothstein <drothstein@gmail.com> | 2015-10-11 15:22:24 -0400 |
---|---|---|
committer | David Rothstein <drothstein@gmail.com> | 2015-10-11 15:22:24 -0400 |
commit | 6379101933142e2eeaea2f4eb41f4d32a9e47531 (patch) | |
tree | 147f757fdea5c307904005018eb0c6f9d28b646c /modules | |
parent | f7548361a664b6cb2fffc4e23a2a1a6620addd80 (diff) | |
download | brdo-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.module | 23 | ||||
-rw-r--r-- | modules/filter/filter.test | 23 |
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); + } +} |