iliaa Tue Jun 8 10:55:14 2004 EDT Modified files: /php-src/ext/tidy tidy.c Log: Fixed bug #1580 (Tidy configuration settings leak memory). http://cvs.php.net/diff.php/php-src/ext/tidy/tidy.c?r1=1.53&r2=1.54&ty=u Index: php-src/ext/tidy/tidy.c diff -u php-src/ext/tidy/tidy.c:1.53 php-src/ext/tidy/tidy.c:1.54 --- php-src/ext/tidy/tidy.c:1.53 Fri May 28 16:32:52 2004 +++ php-src/ext/tidy/tidy.c Tue Jun 8 10:55:14 2004 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: tidy.c,v 1.53 2004/05/28 20:32:52 john Exp $ */ +/* $Id: tidy.c,v 1.54 2004/06/08 14:55:14 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -330,39 +330,52 @@ static int _php_tidy_set_tidy_opt(TidyDoc doc, char *optname, zval *value TSRMLS_DC) { - TidyOption opt; - - opt = tidyGetOptionByName(doc, optname); + TidyOption opt = tidyGetOptionByName(doc, optname); + zval conv = *value; if (!opt) { - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown Tidy Configuration Option '%s'", optname); + php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unknown Tidy Configuration Option '%s'", optname); return FAILURE; } if (tidyOptIsReadOnly(opt)) { - - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Attempting to set read-only option '%s'", optname); + php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Attempting to set read-only option '%s'", optname); return FAILURE; } switch(tidyOptGetType(opt)) { case TidyString: - convert_to_string_ex(&value); - if (tidyOptSetValue(doc, tidyOptGetId(opt), Z_STRVAL_P(value))) { + if (Z_TYPE(conv) != IS_STRING) { + zval_copy_ctor(&conv); + convert_to_string(&conv); + } + if (tidyOptSetValue(doc, tidyOptGetId(opt), Z_STRVAL(conv))) { + if (Z_TYPE(conv) != Z_TYPE_P(value)) { + zval_dtor(&conv); + } return SUCCESS; } + if (Z_TYPE(conv) != Z_TYPE_P(value)) { + zval_dtor(&conv); + } break; case TidyInteger: - convert_to_long_ex(&value); - if (tidyOptSetInt(doc, tidyOptGetId(opt), Z_LVAL_P(value))) { + if (Z_TYPE(conv) != IS_LONG) { + zval_copy_ctor(&conv); + convert_to_long(&conv); + } + if (tidyOptSetInt(doc, tidyOptGetId(opt), Z_LVAL(conv))) { return SUCCESS; } break; case TidyBoolean: - convert_to_long_ex(&value); - if (tidyOptSetBool(doc, tidyOptGetId(opt), Z_LVAL_P(value))) { + if (Z_TYPE(conv) != IS_LONG) { + zval_copy_ctor(&conv); + convert_to_long(&conv); + } + if (tidyOptSetBool(doc, tidyOptGetId(opt), Z_LVAL(conv))) { return SUCCESS; } break; @@ -371,7 +384,7 @@ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to determine type of configuration option"); break; } - + return FAILURE; } @@ -939,7 +952,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.53 2004/05/28 20:32:52 john Exp $)"); + php_info_print_table_row(2, "Extension Version", PHP_TIDY_MODULE_VERSION " ($Id: tidy.c,v 1.54 2004/06/08 14:55:14 iliaa Exp $)"); php_info_print_table_end(); DISPLAY_INI_ENTRIES();
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php