fix crash when fetching a node type that doesnt exist

# reported in a manual user note
This commit is contained in:
Nuno Lopes 2007-09-20 22:25:06 +00:00
parent c70e307e77
commit fa0efe45e0
2 changed files with 46 additions and 12 deletions

28
ext/tidy/tests/029.phpt Normal file
View file

@ -0,0 +1,28 @@
--TEST--
tidy_get_body() crash
--SKIPIF--
<?php if (!extension_loaded('tidy')) die('skip'); ?>
--FILE--
<?php
// bug report taken from http://news.php.net/php.notes/130628
$inputs = array(
'<frameset > </frameset>',
'<html><frameset> </frameset> </html',
);
foreach ($inputs as $input) {
$t = tidy_parse_string($input);
$t->cleanRepair();
var_dump(tidy_get_body($t));
}
echo "Done\n";
?>
--EXPECT--
NULL
NULL
Done

View file

@ -870,35 +870,41 @@ static void *php_tidy_get_opt_val(PHPTidyDoc *ptdoc, TidyOption opt, TidyOptionT
return NULL;
}
static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes node)
static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes node_type)
{
PHPTidyObj *newobj;
TidyNode node;
TIDY_FETCH_OBJECT;
tidy_instanciate(tidy_ce_node, return_value TSRMLS_CC);
newobj = (PHPTidyObj *) zend_object_store_get_object(return_value TSRMLS_CC);
newobj->type = is_node;
newobj->ptdoc = obj->ptdoc;
newobj->ptdoc->ref_count++;
switch(node) {
switch (node_type) {
case is_root_node:
newobj->node = tidyGetRoot(newobj->ptdoc->doc);
node = tidyGetRoot(obj->ptdoc->doc);
break;
case is_html_node:
newobj->node = tidyGetHtml(newobj->ptdoc->doc);
node = tidyGetHtml(obj->ptdoc->doc);
break;
case is_head_node:
newobj->node = tidyGetHead(newobj->ptdoc->doc);
node = tidyGetHead(obj->ptdoc->doc);
break;
case is_body_node:
newobj->node = tidyGetBody(newobj->ptdoc->doc);
node = tidyGetBody(obj->ptdoc->doc);
break;
}
if (!node) {
RETURN_NULL();
}
tidy_instanciate(tidy_ce_node, return_value TSRMLS_CC);
newobj = (PHPTidyObj *) zend_object_store_get_object(return_value TSRMLS_CC);
newobj->type = is_node;
newobj->ptdoc = obj->ptdoc;
newobj->node = node;
newobj->ptdoc->ref_count++;
tidy_add_default_properties(newobj, is_node TSRMLS_CC);
}