diff options
Diffstat (limited to 'ext/dom/xpath.c')
-rw-r--r-- | ext/dom/xpath.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c index 57d1c8796a..f0b908ccf3 100644 --- a/ext/dom/xpath.c +++ b/ext/dom/xpath.c @@ -134,8 +134,8 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, xmlFree(str); } else if (type == 2) { int j; - array_init(&fci.params[i]); if (obj->nodesetval && obj->nodesetval->nodeNr > 0) { + array_init(&fci.params[i]); for (j = 0; j < obj->nodesetval->nodeNr; j++) { xmlNodePtr node = obj->nodesetval->nodeTab[j]; zval child; @@ -161,6 +161,8 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, php_dom_create_object(node, &child, &intern->dom); add_next_index_zval(&fci.params[i], &child); } + } else { + ZVAL_EMPTY_ARRAY(&fci.params[i]); } } break; @@ -430,10 +432,9 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ int i; xmlNodeSetPtr nodesetp; - array_init(&retval); - - if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval)) { + if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval) && nodesetp->nodeNr) { + array_init(&retval); for (i = 0; i < nodesetp->nodeNr; i++) { xmlNodePtr node = nodesetp->nodeTab[i]; zval child; @@ -459,6 +460,8 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ php_dom_create_object(node, &child, &intern->dom); add_next_index_zval(&retval, &child); } + } else { + ZVAL_EMPTY_ARRAY(&retval); } php_dom_create_interator(return_value, DOM_NODELIST); nodeobj = Z_DOMOBJ_P(return_value); |