Skip to content

Deduplicate NULL checks in ext/dom #15015

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions ext/dom/attr.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,8 @@ zend_result dom_attr_owner_element_read(dom_object *obj, zval *retval)
DOM_PROP_NODE(xmlNodePtr, nodep, obj);

xmlNodePtr nodeparent = nodep->parent;
if (!nodeparent) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(nodeparent, retval, obj);
php_dom_create_nullable_object(nodeparent, retval, obj);
return SUCCESS;
}

Expand Down
12 changes: 2 additions & 10 deletions ext/dom/document.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,8 @@ zend_result dom_document_doctype_read(dom_object *obj, zval *retval)
DOM_PROP_NODE(xmlDocPtr, docp, obj);

xmlDtdPtr dtdptr = xmlGetIntSubset(docp);
if (!dtdptr) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object((xmlNodePtr) dtdptr, retval, obj);
php_dom_create_nullable_object((xmlNodePtr) dtdptr, retval, obj);
return SUCCESS;
}

Expand Down Expand Up @@ -83,12 +79,8 @@ zend_result dom_document_document_element_read(dom_object *obj, zval *retval)
DOM_PROP_NODE(xmlDocPtr, docp, obj);

xmlNodePtr root = xmlDocGetRootElement(docp);
if (!root) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(root, retval, obj);
php_dom_create_nullable_object(root, retval, obj);
return SUCCESS;
}

Expand Down
6 changes: 1 addition & 5 deletions ext/dom/entityreference.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,8 @@ zend_result dom_entity_reference_child_read(dom_object *obj, zval *retval)
DOM_PROP_NODE(xmlNodePtr, nodep, obj);

xmlEntityPtr entity = dom_entity_reference_fetch_and_sync_declaration(nodep);
if (entity == NULL) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object((xmlNodePtr) entity, retval, obj);
php_dom_create_nullable_object((xmlNodePtr) entity, retval, obj);
return SUCCESS;
}

Expand Down
6 changes: 1 addition & 5 deletions ext/dom/html_document.c
Original file line number Diff line number Diff line change
Expand Up @@ -1386,11 +1386,7 @@ zend_result dom_html_document_element_read_helper(dom_object *obj, zval *retval,
DOM_PROP_NODE(const xmlDoc *, docp, obj);

const xmlNode *element = dom_html_document_element_read_raw(docp, accept);
if (element == NULL) {
ZVAL_NULL(retval);
} else {
php_dom_create_object((xmlNodePtr) element, retval, obj);
}
php_dom_create_nullable_object((xmlNodePtr) element, retval, obj);

return SUCCESS;
}
Expand Down
40 changes: 6 additions & 34 deletions ext/dom/node.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,12 +304,7 @@ zend_result dom_node_first_child_read(dom_object *obj, zval *retval)
first = nodep->children;
}

if (!first) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(first, retval, obj);
php_dom_create_nullable_object(first, retval, obj);
return SUCCESS;
}

Expand All @@ -329,12 +324,7 @@ zend_result dom_node_last_child_read(dom_object *obj, zval *retval)
last = nodep->last;
}

if (!last) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(last, retval, obj);
php_dom_create_nullable_object(last, retval, obj);
return SUCCESS;
}

Expand All @@ -350,12 +340,8 @@ zend_result dom_node_previous_sibling_read(dom_object *obj, zval *retval)
DOM_PROP_NODE(xmlNodePtr, nodep, obj);

xmlNodePtr prevsib = nodep->prev;
if (!prevsib) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(prevsib, retval, obj);
php_dom_create_nullable_object(prevsib, retval, obj);
return SUCCESS;
}

Expand All @@ -371,12 +357,8 @@ zend_result dom_node_next_sibling_read(dom_object *obj, zval *retval)
DOM_PROP_NODE(xmlNodePtr, nodep, obj);

xmlNodePtr nextsib = nodep->next;
if (!nextsib) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(nextsib, retval, obj);
php_dom_create_nullable_object(nextsib, retval, obj);
return SUCCESS;
}

Expand All @@ -397,12 +379,7 @@ zend_result dom_node_previous_element_sibling_read(dom_object *obj, zval *retval
prevsib = prevsib->prev;
}

if (!prevsib) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(prevsib, retval, obj);
php_dom_create_nullable_object(prevsib, retval, obj);
return SUCCESS;
}

Expand All @@ -423,12 +400,7 @@ zend_result dom_node_next_element_sibling_read(dom_object *obj, zval *retval)
nextsib = nextsib->next;
}

if (!nextsib) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(nextsib, retval, obj);
php_dom_create_nullable_object(nextsib, retval, obj);
return SUCCESS;
}

Expand Down
14 changes: 2 additions & 12 deletions ext/dom/parentnode/tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,7 @@ zend_result dom_parent_node_first_element_child_read(dom_object *obj, zval *retv
first = first->next;
}

if (!first) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(first, retval, obj);
php_dom_create_nullable_object(first, retval, obj);
return SUCCESS;
}
/* }}} */
Expand All @@ -63,12 +58,7 @@ zend_result dom_parent_node_last_element_child_read(dom_object *obj, zval *retva
last = last->prev;
}

if (!last) {
ZVAL_NULL(retval);
return SUCCESS;
}

php_dom_create_object(last, retval, obj);
php_dom_create_nullable_object(last, retval, obj);
return SUCCESS;
}
/* }}} */
Expand Down
10 changes: 10 additions & 0 deletions ext/dom/php_dom.c
Original file line number Diff line number Diff line change
Expand Up @@ -1606,6 +1606,16 @@ static zend_always_inline zend_class_entry *dom_get_element_ce(const xmlNode *no
}
}

bool php_dom_create_nullable_object(xmlNodePtr obj, zval *return_value, dom_object *domobj)
{
if (!obj) {
ZVAL_NULL(return_value);
return false;
}

return php_dom_create_object(obj, return_value, domobj);
}

/* {{{ php_dom_create_object */
PHP_DOM_EXPORT bool php_dom_create_object(xmlNodePtr obj, zval *return_value, dom_object *domobj)
{
Expand Down
1 change: 1 addition & 0 deletions ext/dom/php_dom.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ const char *dom_locate_a_namespace(const xmlNode *node, const zend_string *prefi
void dom_mark_namespaces_as_attributes_too(php_dom_libxml_ns_mapper *ns_mapper, xmlDocPtr doc);
bool dom_compare_value(const xmlAttr *attr, const xmlChar *value);
void dom_attr_value_will_change(dom_object *obj, xmlAttrPtr attrp);
bool php_dom_create_nullable_object(xmlNodePtr obj, zval *return_value, dom_object *domobj);

typedef enum {
DOM_LOAD_STRING = 0,
Expand Down
Loading