[PHP-CVS] svn: /php/php-src/ branches/PHP_5_3/NEWS branches/PHP_5_3/ext/standard/basic_functions.c branches/PHP_5_3/ext/standard/basic_functions.h branches/PHP_5_3/ext/standard/browscap.c branches/PHP
cataphract Sun, 01 May 2011 18:37:20 + Revision: http://svn.php.net/viewvc?view=revisionrevision=310691 Log: - Fixed bug #54580 (get_browser() segmentation fault when the browscap ini directive is set in activation time). This commit fixes this by adding a per request parsing of the browscap file that's when get_browser is called the first time and the directive is set on activation time.w Bug: http://bugs.php.net/54580 (Assigned) get_browser() segmentation fault Changed paths: U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/ext/standard/basic_functions.c U php/php-src/branches/PHP_5_3/ext/standard/basic_functions.h U php/php-src/branches/PHP_5_3/ext/standard/browscap.c U php/php-src/branches/PHP_5_3/main/main.c U php/php-src/trunk/ext/standard/basic_functions.c U php/php-src/trunk/ext/standard/basic_functions.h U php/php-src/trunk/ext/standard/browscap.c U php/php-src/trunk/main/main.c Modified: php/php-src/branches/PHP_5_3/NEWS === --- php/php-src/branches/PHP_5_3/NEWS 2011-05-01 17:57:35 UTC (rev 310690) +++ php/php-src/branches/PHP_5_3/NEWS 2011-05-01 18:37:20 UTC (rev 310691) @@ -19,6 +19,8 @@ . Implemented FR #54459 (Range function accuracy). (Adam) . Added PHP_MANDIR constant telling where the manpages were installed into, and an --man-dir argument to php-config. (Hannes) + . Fixed bug #54580 (get_browser() segmentation fault when browscap ini +directive is set through php_admin_value). (Gustavo) . Fixed bug #54238 (use-after-free in substr_replace()). (Stas) (CVE-2011-1148) . Fixed bug #54180 (parse_url() incorrectly parses path when ? in fragment). Modified: php/php-src/branches/PHP_5_3/ext/standard/basic_functions.c === --- php/php-src/branches/PHP_5_3/ext/standard/basic_functions.c 2011-05-01 17:57:35 UTC (rev 310690) +++ php/php-src/branches/PHP_5_3/ext/standard/basic_functions.c 2011-05-01 18:37:20 UTC (rev 310691) @@ -3803,6 +3803,7 @@ } PHP_RSHUTDOWN(user_filters)(SHUTDOWN_FUNC_ARGS_PASSTHRU); + PHP_RSHUTDOWN(browscap)(SHUTDOWN_FUNC_ARGS_PASSTHRU); BG(page_uid) = -1; BG(page_gid) = -1; Modified: php/php-src/branches/PHP_5_3/ext/standard/basic_functions.h === --- php/php-src/branches/PHP_5_3/ext/standard/basic_functions.h 2011-05-01 17:57:35 UTC (rev 310690) +++ php/php-src/branches/PHP_5_3/ext/standard/basic_functions.h 2011-05-01 18:37:20 UTC (rev 310691) @@ -140,6 +140,7 @@ PHP_FUNCTION(stream_bucket_new); PHP_MINIT_FUNCTION(user_filters); PHP_RSHUTDOWN_FUNCTION(user_filters); +PHP_RSHUTDOWN_FUNCTION(browscap); /* Left for BC (not binary safe!) */ PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC); Modified: php/php-src/branches/PHP_5_3/ext/standard/browscap.c === --- php/php-src/branches/PHP_5_3/ext/standard/browscap.c 2011-05-01 17:57:35 UTC (rev 310690) +++ php/php-src/branches/PHP_5_3/ext/standard/browscap.c 2011-05-01 18:37:20 UTC (rev 310691) @@ -27,18 +27,51 @@ #include zend_ini_scanner.h #include zend_globals.h -static HashTable browser_hash; -static zval *current_section; -static char *current_section_name; +typedef struct { + HashTable *htab; + zval *current_section; + char *current_section_name; + char filename[MAXPATHLEN]; +} browser_data; +/* browser data defined in startup phase, eagerly loaded in MINIT */ +static browser_data global_bdata = {0}; + +/* browser data defined in activation phase, lazily loaded in get_browser. + * Per request and per thread, if applicable */ +ZEND_BEGIN_MODULE_GLOBALS(browscap) + browser_data activation_bdata; +ZEND_END_MODULE_GLOBALS(browscap) + +ZEND_DECLARE_MODULE_GLOBALS(browscap); + +#ifdef ZTS +#define BROWSCAP_G(v) TSRMG(browscap_globals_id, zend_browscap_globals *, v) +#else +#define BROWSCAP_G(v) (browscap_globals.v) +#endif + #define DEFAULT_SECTION_NAME Default Browser Capability Settings /* OBJECTS_FIXME: This whole extension needs going through. The use of objects looks pretty broken here */ -static void browscap_entry_dtor(zval **zvalue) /* {{{ */ +static void browscap_entry_dtor_request(zval **zvalue) /* {{{ */ { if (Z_TYPE_PP(zvalue) == IS_ARRAY) { zend_hash_destroy(Z_ARRVAL_PP(zvalue)); + efree(Z_ARRVAL_PP(zvalue)); + } else if (Z_TYPE_PP(zvalue) == IS_STRING) { + if (Z_STRVAL_PP(zvalue)) { + efree(Z_STRVAL_PP(zvalue)); + } + } + efree(*zvalue); +} +/* }}} */ + +static void browscap_entry_dtor_persistent(zval **zvalue) /* {{{ */ { + if (Z_TYPE_PP(zvalue) == IS_ARRAY) { + zend_hash_destroy(Z_ARRVAL_PP(zvalue)); free(Z_ARRVAL_PP(zvalue)); } else if (Z_TYPE_PP(zvalue) == IS_STRING) { if (Z_STRVAL_PP(zvalue)) { @@ -49,16 +82,16 @@ } /* }}} */
[PHP-CVS] svn: /php/php-src/trunk/ext/standard/ browscap.c
felipe Sun, 01 May 2011 19:22:24 + Revision: http://svn.php.net/viewvc?view=revisionrevision=310692 Log: - Fixed ZTS build Changed paths: U php/php-src/trunk/ext/standard/browscap.c Modified: php/php-src/trunk/ext/standard/browscap.c === --- php/php-src/trunk/ext/standard/browscap.c 2011-05-01 18:37:20 UTC (rev 310691) +++ php/php-src/trunk/ext/standard/browscap.c 2011-05-01 19:22:24 UTC (rev 310692) @@ -360,7 +360,7 @@ { browser_data *bdata = BROWSCAP_G(activation_bdata); if (bdata-filename[0] != '\0') { - browscap_bdata_dtor(bdata, 0); + browscap_bdata_dtor(bdata, 0 TSRMLS_CC); } return SUCCESS; @@ -369,7 +369,7 @@ PHP_MSHUTDOWN_FUNCTION(browscap) /* {{{ */ { - browscap_bdata_dtor(global_bdata, 1); + browscap_bdata_dtor(global_bdata, 1 TSRMLS_CC); return SUCCESS; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/branches/PHP_5_3/ext/standard/ browscap.c
tony2001 Sun, 01 May 2011 19:46:27 + Revision: http://svn.php.net/viewvc?view=revisionrevision=310693 Log: fix ZTS build for 5_3, too Changed paths: U php/php-src/branches/PHP_5_3/ext/standard/browscap.c Modified: php/php-src/branches/PHP_5_3/ext/standard/browscap.c === --- php/php-src/branches/PHP_5_3/ext/standard/browscap.c2011-05-01 19:22:24 UTC (rev 310692) +++ php/php-src/branches/PHP_5_3/ext/standard/browscap.c2011-05-01 19:46:27 UTC (rev 310693) @@ -348,7 +348,7 @@ #ifdef ZTS ts_allocate_id(browscap_globals_id, sizeof(browser_data), - browscap_globals_ctor, NULL); + (ts_allocate_ctor)browscap_globals_ctor, NULL); #endif /* ctor call not really needed for non-ZTS */ @@ -360,7 +360,7 @@ { browser_data *bdata = BROWSCAP_G(activation_bdata); if (bdata-filename[0] != '\0') { - browscap_bdata_dtor(bdata, 0); + browscap_bdata_dtor(bdata, 0 TSRMLS_CC); } return SUCCESS; @@ -369,7 +369,7 @@ PHP_MSHUTDOWN_FUNCTION(browscap) /* {{{ */ { - browscap_bdata_dtor(global_bdata, 1); + browscap_bdata_dtor(global_bdata, 1 TSRMLS_CC); return SUCCESS; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /SVNROOT/ global_avail
rasmus Sun, 01 May 2011 22:30:18 + Revision: http://svn.php.net/viewvc?view=revisionrevision=310696 Log: SVNROOT access for Hannes Changed paths: U SVNROOT/global_avail Modified: SVNROOT/global_avail === --- SVNROOT/global_avail2011-05-01 21:49:47 UTC (rev 310695) +++ SVNROOT/global_avail2011-05-01 22:30:18 UTC (rev 310696) @@ -7,7 +7,7 @@ # Some people also have access to the configuration files in the SVNROOT. -avail|sterling,goba,imajes,wez,iliaa,derick,jon,cox,alan_k,jmcastagnetto,mj,pajoye,helly,philip,stas,johannes,gwynne,lsmith|SVNROOT +avail|sterling,goba,imajes,wez,iliaa,derick,jon,cox,alan_k,jmcastagnetto,mj,pajoye,helly,philip,stas,johannes,gwynne,lsmith,bjori|SVNROOT # Some PEAR people get access to the pear-specific avail file in SVNROOT. -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php