[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

2011-05-01 Thread Gustavo André dos Santos Lopes
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

2011-05-01 Thread Felipe Pena
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

2011-05-01 Thread Antony Dovgal
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

2011-05-01 Thread Rasmus Lerdorf
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