Skip to content

Commit 2b7ea23

Browse files
committed
Throw DomException instead
1 parent bddcd6f commit 2b7ea23

File tree

4 files changed

+23
-13
lines changed

4 files changed

+23
-13
lines changed

ext/dom/document.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -506,10 +506,6 @@ int dom_document_config_read(dom_object *obj, zval *retval)
506506

507507
/* }}} */
508508

509-
ZEND_NORETURN static void php_dom_fatal_libxml_error(void) {
510-
zend_error_noreturn(E_ERROR, "Libxml error: Likely out of memory");
511-
}
512-
513509
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-2141741547
514510
Since:
515511
*/
@@ -537,7 +533,8 @@ PHP_METHOD(DOMDocument, createElement)
537533

538534
node = xmlNewDocNode(docp, NULL, (xmlChar *) name, (xmlChar *) value);
539535
if (!node) {
540-
php_dom_fatal_libxml_error();
536+
php_dom_throw_error(LIBXML_ERR, /* strict */ true);
537+
RETURN_THROWS();
541538
}
542539

543540
DOM_RET_OBJ(node, &ret, intern);
@@ -564,7 +561,8 @@ PHP_METHOD(DOMDocument, createDocumentFragment)
564561

565562
node = xmlNewDocFragment(docp);
566563
if (!node) {
567-
php_dom_fatal_libxml_error();
564+
php_dom_throw_error(LIBXML_ERR, /* strict */ true);
565+
RETURN_THROWS();
568566
}
569567

570568
DOM_RET_OBJ(node, &ret, intern);
@@ -593,7 +591,8 @@ PHP_METHOD(DOMDocument, createTextNode)
593591

594592
node = xmlNewDocText(docp, (xmlChar *) value);
595593
if (!node) {
596-
php_dom_fatal_libxml_error();
594+
php_dom_throw_error(LIBXML_ERR, /* strict */ true);
595+
RETURN_THROWS();
597596
}
598597

599598
DOM_RET_OBJ(node, &ret, intern);
@@ -622,7 +621,8 @@ PHP_METHOD(DOMDocument, createComment)
622621

623622
node = xmlNewDocComment(docp, (xmlChar *) value);
624623
if (!node) {
625-
php_dom_fatal_libxml_error();
624+
php_dom_throw_error(LIBXML_ERR, /* strict */ true);
625+
RETURN_THROWS();
626626
}
627627

628628
DOM_RET_OBJ(node, &ret, intern);
@@ -651,7 +651,8 @@ PHP_METHOD(DOMDocument, createCDATASection)
651651

652652
node = xmlNewCDataBlock(docp, (xmlChar *) value, value_len);
653653
if (!node) {
654-
php_dom_fatal_libxml_error();
654+
php_dom_throw_error(LIBXML_ERR, /* strict */ true);
655+
RETURN_THROWS();
655656
}
656657

657658
DOM_RET_OBJ(node, &ret, intern);
@@ -685,7 +686,8 @@ PHP_METHOD(DOMDocument, createProcessingInstruction)
685686

686687
node = xmlNewPI((xmlChar *) name, (xmlChar *) value);
687688
if (!node) {
688-
php_dom_fatal_libxml_error();
689+
php_dom_throw_error(LIBXML_ERR, /* strict */ true);
690+
RETURN_THROWS();
689691
}
690692

691693
node->doc = docp;
@@ -721,7 +723,8 @@ PHP_METHOD(DOMDocument, createAttribute)
721723

722724
node = xmlNewDocProp(docp, (xmlChar *) name, NULL);
723725
if (!node) {
724-
php_dom_fatal_libxml_error();
726+
php_dom_throw_error(LIBXML_ERR, /* strict */ true);
727+
RETURN_THROWS();
725728
}
726729

727730
DOM_RET_OBJ((xmlNodePtr) node, &ret, intern);
@@ -756,7 +759,8 @@ PHP_METHOD(DOMDocument, createEntityReference)
756759

757760
node = xmlNewReference(docp, (xmlChar *) name);
758761
if (!node) {
759-
php_dom_fatal_libxml_error();
762+
php_dom_throw_error(LIBXML_ERR, /* strict */ true);
763+
RETURN_THROWS();
760764
}
761765

762766
DOM_RET_OBJ((xmlNodePtr) node, &ret, intern);

ext/dom/domexception.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ void php_dom_throw_error(int error_code, int strict_error)
9797
case VALIDATION_ERR:
9898
error_message = "Validation Error";
9999
break;
100+
case LIBXML_ERR:
101+
error_message = "Unknown LibXML error, likely out of memory";
102+
break;
100103
default:
101104
error_message = "Unhandled Error";
102105
}

ext/dom/domexception.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ typedef enum {
4343
/* Introduced in DOM Level 2: */
4444
INVALID_ACCESS_ERR = 15,
4545
/* Introduced in DOM Level 3: */
46-
VALIDATION_ERR = 16
46+
VALIDATION_ERR = 16,
47+
/* Unknown libxml error, likely out of memory. */
48+
LIBXML_ERR = 128,
4749
} dom_exception_code;
4850

4951
#endif /* DOM_EXCEPTION_H */

ext/dom/php_dom.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,7 @@ PHP_MINIT_FUNCTION(dom)
839839
REGISTER_LONG_CONSTANT("DOM_NAMESPACE_ERR", NAMESPACE_ERR, CONST_CS | CONST_PERSISTENT);
840840
REGISTER_LONG_CONSTANT("DOM_INVALID_ACCESS_ERR", INVALID_ACCESS_ERR, CONST_CS | CONST_PERSISTENT);
841841
REGISTER_LONG_CONSTANT("DOM_VALIDATION_ERR", VALIDATION_ERR, CONST_CS | CONST_PERSISTENT);
842+
REGISTER_LONG_CONSTANT("DOM_LIBXML_ERR", LIBXML_ERR, CONST_CS | CONST_PERSISTENT);
842843

843844
php_libxml_register_export(dom_node_class_entry, php_dom_export_node);
844845

0 commit comments

Comments
 (0)