mirror of
https://github.com/php/php-src.git
synced 2026-04-07 16:13:32 +02:00
Merge branch 'PHP-5.6'
* PHP-5.6: updated NEWS updated NEWS Fixed bug #67081 DOMDocumentType->internalSubset returns entire DOCTYPE tag, not only the subset
This commit is contained in:
@@ -188,8 +188,7 @@ int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_
|
||||
{
|
||||
|
||||
xmlDtdPtr dtdptr;
|
||||
xmlDtd *intsubset;
|
||||
xmlOutputBuffer *buff = NULL;
|
||||
xmlDtdPtr intsubset;
|
||||
|
||||
dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
|
||||
|
||||
@@ -200,22 +199,37 @@ int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_
|
||||
|
||||
ALLOC_ZVAL(*retval);
|
||||
|
||||
if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) {
|
||||
buff = xmlAllocOutputBuffer(NULL);
|
||||
if (buff != NULL) {
|
||||
xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL);
|
||||
xmlOutputBufferFlush(buff);
|
||||
if (dtdptr->doc != NULL && ((intsubset = xmlGetIntSubset(dtdptr->doc)) != NULL) && intsubset->children != NULL) {
|
||||
smart_str ret_buf = {0};
|
||||
xmlNodePtr cur = intsubset->children;
|
||||
|
||||
while (cur != NULL) {
|
||||
xmlOutputBuffer *buff = xmlAllocOutputBuffer(NULL);
|
||||
|
||||
if (buff != NULL) {
|
||||
xmlNodeDumpOutput (buff, NULL, cur, 0, 0, NULL);
|
||||
xmlOutputBufferFlush(buff);
|
||||
|
||||
#ifdef LIBXML2_NEW_BUFFER
|
||||
ZVAL_STRINGL(*retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff), 1);
|
||||
smart_str_appendl(ret_buf, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff));
|
||||
#else
|
||||
ZVAL_STRINGL(*retval, buff->buffer->content, buff->buffer->use, 1);
|
||||
smart_str_appendl(&ret_buf, buff->buffer->content, buff->buffer->use);
|
||||
#endif
|
||||
(void)xmlOutputBufferClose(buff);
|
||||
|
||||
(void)xmlOutputBufferClose(buff);
|
||||
}
|
||||
|
||||
cur = cur->next;
|
||||
}
|
||||
|
||||
if (ret_buf.len) {
|
||||
ZVAL_STRINGL(*retval, ret_buf.c, ret_buf.len, 1);
|
||||
smart_str_free(&ret_buf);
|
||||
return SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
ZVAL_EMPTY_STRING(*retval);
|
||||
ZVAL_NULL(*retval);
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
|
||||
@@ -43,6 +43,6 @@ print 'notation: '.$notation->nodeName."\n";
|
||||
publicId: -//OASIS//DTD DocBook XML//EN
|
||||
systemId: docbookx.dtd
|
||||
name: chapter
|
||||
internalSubset: <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML//EN" "docbookx.dtd">
|
||||
internalSubset:
|
||||
entity: logo
|
||||
notation: gif
|
||||
notation: gif
|
||||
|
||||
43
ext/dom/tests/bug67081.phpt
Normal file
43
ext/dom/tests/bug67081.phpt
Normal file
@@ -0,0 +1,43 @@
|
||||
--TEST--
|
||||
Bug #67081 DOMDocumentType->internalSubset returns entire DOCTYPE tag, not only the subset
|
||||
--SKIPIF--
|
||||
<?php
|
||||
require_once('skipif.inc');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$domDocument = new DOMDocument();
|
||||
$domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_0.xml");
|
||||
var_dump($domDocument->doctype->internalSubset);
|
||||
|
||||
$domDocument = new DOMDocument();
|
||||
$domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_1.xml");
|
||||
var_dump($domDocument->doctype->internalSubset);
|
||||
|
||||
$domDocument = new DOMDocument();
|
||||
$domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_2.xml");
|
||||
var_dump($domDocument->doctype->internalSubset);
|
||||
|
||||
$domDocument = new DOMDocument();
|
||||
$domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "dom.xml");
|
||||
var_dump($domDocument->doctype->internalSubset);
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
string(19) "<!ELEMENT a EMPTY>
|
||||
"
|
||||
string(38) "<!ELEMENT a EMPTY>
|
||||
<!ELEMENT b EMPTY>
|
||||
"
|
||||
NULL
|
||||
string(277) "<!ENTITY % incent SYSTEM "dom.ent">
|
||||
<!ENTITY amp "&#38;">
|
||||
<!ENTITY gt ">">
|
||||
<!ENTITY % coreattrs "title CDATA #IMPLIED">
|
||||
<!ENTITY % attrs "%coreattrs;">
|
||||
<!ATTLIST foo bar CDATA #IMPLIED>
|
||||
<!ELEMENT foo (#PCDATA)>
|
||||
<!ELEMENT root (foo)+>
|
||||
<!ATTLIST th title CDATA #IMPLIED>
|
||||
"
|
||||
===DONE===
|
||||
6
ext/dom/tests/bug67081_0.xml
Normal file
6
ext/dom/tests/bug67081_0.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE a [
|
||||
<!ELEMENT a EMPTY>
|
||||
]>
|
||||
<a></a>
|
||||
|
||||
7
ext/dom/tests/bug67081_1.xml
Normal file
7
ext/dom/tests/bug67081_1.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE a [
|
||||
<!ELEMENT a EMPTY>
|
||||
<!ELEMENT b EMPTY>
|
||||
]>
|
||||
<a></a>
|
||||
|
||||
5
ext/dom/tests/bug67081_2.xml
Normal file
5
ext/dom/tests/bug67081_2.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<a></a>
|
||||
|
||||
Reference in New Issue
Block a user