nlopess Thu Sep 20 22:30:49 2007 UTC Modified files: /php-src/ext/tidy tidy.c /php-src/ext/tidy/tests 029.phpt Log: MFB: fix crash in tidy_get_body() and related functions when the node doesnt exist http://cvs.php.net/viewvc.cgi/php-src/ext/tidy/tidy.c?r1=1.113&r2=1.114&diff_format=u Index: php-src/ext/tidy/tidy.c diff -u php-src/ext/tidy/tidy.c:1.113 php-src/ext/tidy/tidy.c:1.114 --- php-src/ext/tidy/tidy.c:1.113 Fri May 4 17:45:56 2007 +++ php-src/ext/tidy/tidy.c Thu Sep 20 22:30:48 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: tidy.c,v 1.113 2007/05/04 17:45:56 nlopess Exp $ */ +/* $Id: tidy.c,v 1.114 2007/09/20 22:30:48 nlopess Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -902,37 +902,42 @@ 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++; - newobj->converter = obj->converter; - if (obj->converter) obj->converter->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->ptdoc->ref_count++; + newobj->converter = obj->converter; + if (obj->converter) obj->converter->ref_count++; + tidy_add_default_properties(newobj, is_node TSRMLS_CC); } @@ -1056,7 +1061,7 @@ php_info_print_table_start(); php_info_print_table_header(2, "Tidy support", "enabled"); php_info_print_table_row(2, "libTidy Release", (char *)tidyReleaseDate()); - php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.113 2007/05/04 17:45:56 nlopess Exp $)"); + php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.114 2007/09/20 22:30:48 nlopess Exp $)"); php_info_print_table_end(); DISPLAY_INI_ENTRIES(); http://cvs.php.net/viewvc.cgi/php-src/ext/tidy/tests/029.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/tidy/tests/029.phpt diff -u /dev/null php-src/ext/tidy/tests/029.phpt:1.2 --- /dev/null Thu Sep 20 22:30:49 2007 +++ php-src/ext/tidy/tests/029.phpt Thu Sep 20 22:30:49 2007 @@ -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
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php