@@ -785,37 +785,52 @@ static xmlNodePtr dom_insert_fragment(xmlNodePtr nodep, xmlNodePtr prevsib, xmlN
785
785
}
786
786
/* }}} */
787
787
788
- /* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727
789
- Since:
790
- */
791
- static void dom_node_insert_before_legacy (zval * return_value , zval * ref , dom_object * intern , dom_object * childobj , xmlNodePtr parentp , xmlNodePtr child )
788
+ static bool dom_node_check_legacy_insertion_validity (xmlNodePtr parentp , xmlNodePtr child , bool stricterror )
792
789
{
793
- if (!dom_node_children_valid (parentp )) {
794
- RETURN_FALSE ;
795
- }
796
-
797
- xmlNodePtr new_child = NULL ;
798
- bool stricterror = dom_get_strict_error (intern -> document );
799
-
800
790
if (dom_node_is_read_only (parentp ) == SUCCESS ||
801
791
(child -> parent != NULL && dom_node_is_read_only (child -> parent ) == SUCCESS )) {
802
792
php_dom_throw_error (NO_MODIFICATION_ALLOWED_ERR , stricterror );
803
- RETURN_FALSE ;
793
+ return false ;
804
794
}
805
795
806
796
if (dom_hierarchy (parentp , child ) == FAILURE ) {
807
797
php_dom_throw_error (HIERARCHY_REQUEST_ERR , stricterror );
808
- RETURN_FALSE ;
798
+ return false ;
809
799
}
810
800
811
801
if (child -> doc != parentp -> doc && child -> doc != NULL ) {
812
802
php_dom_throw_error (WRONG_DOCUMENT_ERR , stricterror );
813
- RETURN_FALSE ;
803
+ return false ;
814
804
}
815
805
816
806
if (child -> type == XML_DOCUMENT_FRAG_NODE && child -> children == NULL ) {
817
807
/* TODO Drop Warning? */
818
808
php_error_docref (NULL , E_WARNING , "Document Fragment is empty" );
809
+ return false;
810
+ }
811
+
812
+ /* In old DOM only text nodes and entity nodes can be added as children to attributes. */
813
+ if (parentp -> type == XML_ATTRIBUTE_NODE && child -> type != XML_TEXT_NODE && child -> type != XML_ENTITY_REF_NODE ) {
814
+ php_dom_throw_error (HIERARCHY_REQUEST_ERR , stricterror );
815
+ return false;
816
+ }
817
+
818
+ return true;
819
+ }
820
+
821
+ /* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727
822
+ Since:
823
+ */
824
+ static void dom_node_insert_before_legacy (zval * return_value , zval * ref , dom_object * intern , dom_object * childobj , xmlNodePtr parentp , xmlNodePtr child )
825
+ {
826
+ if (!dom_node_children_valid (parentp )) {
827
+ RETURN_FALSE ;
828
+ }
829
+
830
+ xmlNodePtr new_child = NULL ;
831
+ bool stricterror = dom_get_strict_error (intern -> document );
832
+
833
+ if (!dom_node_check_legacy_insertion_validity (parentp , child , stricterror )) {
819
834
RETURN_FALSE ;
820
835
}
821
836
@@ -1245,25 +1260,7 @@ static void dom_node_append_child_legacy(zval *return_value, dom_object *intern,
1245
1260
1246
1261
bool stricterror = dom_get_strict_error (intern -> document );
1247
1262
1248
- if (dom_node_is_read_only (nodep ) == SUCCESS ||
1249
- (child -> parent != NULL && dom_node_is_read_only (child -> parent ) == SUCCESS )) {
1250
- php_dom_throw_error (NO_MODIFICATION_ALLOWED_ERR , stricterror );
1251
- RETURN_FALSE ;
1252
- }
1253
-
1254
- if (dom_hierarchy (nodep , child ) == FAILURE ) {
1255
- php_dom_throw_error (HIERARCHY_REQUEST_ERR , stricterror );
1256
- RETURN_FALSE ;
1257
- }
1258
-
1259
- if (!(child -> doc == NULL || child -> doc == nodep -> doc )) {
1260
- php_dom_throw_error (WRONG_DOCUMENT_ERR , stricterror );
1261
- RETURN_FALSE ;
1262
- }
1263
-
1264
- if (child -> type == XML_DOCUMENT_FRAG_NODE && child -> children == NULL ) {
1265
- /* TODO Drop Warning? */
1266
- php_error_docref (NULL , E_WARNING , "Document Fragment is empty" );
1263
+ if (!dom_node_check_legacy_insertion_validity (nodep , child , stricterror )) {
1267
1264
RETURN_FALSE ;
1268
1265
}
1269
1266
0 commit comments