php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #72269
Patch htscanner_php7.0.patch revision 2016-07-03 10:11 UTC by roel at abittechnical dot com
revision 2016-07-02 21:32 UTC by roel at abittechnical dot com
revision 2016-07-02 14:02 UTC by roel at abittechnical dot com
revision 2016-06-05 20:51 UTC by roel at abittechnical dot com
revision 2016-06-05 20:37 UTC by roel at abittechnical dot com
revision 2016-05-31 20:14 UTC by roel at abittechnical dot com

Patch htscanner_php7.0.patch for htscanner Bug #72269

Patch version 2016-06-05 20:37 UTC

Return to Bug #72269 | Download this patch
This patch is obsolete

Obsoleted by patches:

This patch renders other patches obsolete

Obsolete patches:

Patch Revisions: 2016-07-03 10:11 UTC | 2016-07-02 21:32 UTC | 2016-07-02 14:02 UTC | 2016-06-05 20:51 UTC | 2016-06-05 20:37 UTC | 2016-05-31 20:14 UTC

Developer: roel@abittechnical.com



  diff --git a/htscanner.c b/htscanner.c
 index 55bc68b..a79149d 100644
 index 55bc68b..9490afb 100644
  --- a/htscanner.c
  +++ b/htscanner.c
  @@ -147,18 +147,39 @@ static int value_hnd(char *name, char *value, int flag, int mode, HashTable *ini
   #endif


  +#if (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION > 0) || PHP_MAJOR_VERSION >= 7
   	STD_PHP_INI_ENTRY("htscanner.default_ttl", "300", PHP_INI_SYSTEM, OnUpdateLong, default_ttl, zend_htscanner_globals, htscanner_globals)
   	STD_PHP_INI_ENTRY("htscanner.stop_on_error", "0", PHP_INI_SYSTEM, OnUpdateLong, stop_on_error, zend_htscanner_globals, htscanner_globals)
   	STD_PHP_INI_ENTRY("htscanner.verbose", "0", PHP_INI_SYSTEM, OnUpdateLong, verbose, zend_htscanner_globals, htscanner_globals)
 @@ -346,32 +371,64 @@ static int htscanner_main(TSRMLS_D) /* {{{ */
  	t = sapi_get_request_time(TSRMLS_C);
 @@ -274,18 +299,29 @@ PHP_INI_END()
  htscannerMutexDeclare(ini_entries_cache_mutex);
  static HashTable *ini_entries_cache = NULL;
  
 +#if PHP_VERSION_ID < 70000
  static void ini_cache_entry_dtor(htscanner_cache_entry *entry) /* {{{ */
  {
  	zend_hash_destroy(entry->ini_entries);
 -	free(entry->ini_entries);
 +	efree(entry->ini_entries);
 +}
 +/* }}} */
 +#else
 +static void ini_cache_entry_dtor(zval *zentry) /* {{{ */
 +{
 +	htscanner_cache_entry *entry = Z_PTR_P(zentry);
 +	zend_hash_destroy(entry->ini_entries);
 +	efree(entry->ini_entries);
 +	efree(entry);
  }
  /* }}} */
 +#endif
  
  static int php_htscanner_create_cache() /* {{{ */
  {
  	htscannerMutexSetup(ini_entries_cache_mutex);
  
 -	ini_entries_cache = malloc(sizeof(HashTable));
 +	ini_entries_cache = emalloc(sizeof(HashTable));
  	if (!ini_entries_cache) {
  		return FAILURE;
  	}
 @@ -347,26 +383,48 @@ static int htscanner_main(TSRMLS_D) /* {{{ */
   #endif
   
 +#if PHP_VERSION_ID >= 70000
 +	zend_string *zcwd;
 +	zcwd = zend_string_init(cwd, cwd_len, 0);
 +#endif
 +
   	htscannerMutexLock(ini_entries_cache_mutex);
  +#if PHP_VERSION_ID < 70000
   	if (zend_hash_find(ini_entries_cache, cwd, cwd_len, (void**)&entry_fetched) == SUCCESS) {
  +#else
 +	zval *res = zend_hash_find(ini_entries_cache, zcwd);
 +	if (res != NULL) {
 +		entry_fetched = (void*)Z_STRVAL_P(res);
 +	entry_fetched = zend_hash_str_find_ptr(ini_entries_cache, cwd, cwd_len);
 +	if (entry_fetched != NULL) {
  +#endif
   		/* fetch cache and assign */
   		if ((unsigned int)(t - entry_fetched->created_on) < HTG(default_ttl)) {
  +#if PHP_VERSION_ID < 70000


  +			zval *value;
  +#endif
  +			HashPosition pos;
   			ulong num;
  
  
   			zend_hash_internal_pointer_reset_ex(entry_fetched->ini_entries, &pos);
   
  +#if PHP_VERSION_ID < 70000
   			while (SUCCESS == zend_hash_get_current_data_ex(entry_fetched->ini_entries, (void**)&value, &pos)) {
   				zend_hash_get_current_key_ex(entry_fetched->ini_entries, &name, &len, &num, 0, &pos);
   				htscanner_debug("setting: %s = %s (cache hit)", name, value);
  +#else
 +			while (value = zend_hash_get_current_data_ex(entry_fetched->ini_entries, &pos)) {
 +			while ((value = zend_hash_get_current_data_ex(entry_fetched->ini_entries, &pos))) {
  +				zend_hash_get_current_key_ex(entry_fetched->ini_entries, &name, &num, &pos);
 +				htscanner_debug("setting: %s = %s (cache hit)", name, Z_STRVAL_P(res));
 +				htscanner_debug("setting: %s = %s (cache hit)", name, Z_STRVAL_P(value));
  +#endif
   #if PHP_VERSION_ID < 50204
   				if (zend_alter_ini_entry(name, len, value, strlen(value), PHP_INI_PERDIR, PHP_INI_STAGE_PHP_INI_STAGE_RUNTIME) == FAILURE) {
  -#else
  +#elif PHP_VERSION_ID < 70000
   				if (zend_alter_ini_entry(name, len, value, strlen(value), PHP_INI_PERDIR, PHP_INI_STAGE_HTACCESS) == FAILURE) {
  +#else
 +				if (zend_alter_ini_entry(name, Z_STR_P(res), PHP_INI_PERDIR, PHP_INI_STAGE_HTACCESS) == FAILURE) {
 +				if (zend_alter_ini_entry(name, Z_STR_P(value), PHP_INI_PERDIR, PHP_INI_STAGE_HTACCESS) == FAILURE) {
   #endif
   					char msg[1024];
  +#if PHP_VERSION_ID < 70000
   					snprintf(msg, sizeof (msg), "Adding option from cache (Name: '%s' Value: '%s') failed!\n", name, value);
  +#else
 +					snprintf(msg, sizeof (msg), "Adding option from cache (Name: '%s' Value: '%s') failed!\n", name->val, Z_STR_P(res));
 +					zend_string_release(zcwd);
 +					snprintf(msg, sizeof (msg), "Adding option from cache (Name: '%s' Value: '%s') failed!\n", name->val, Z_STR_P(value));
  +#endif
   					htscannerMutexUnlock(ini_entries_cache_mutex);
   					RETURN_FAILURE(msg);
   				}
  				zend_hash_move_forward_ex(entry_fetched->ini_entries, &pos);
  			}
 +#if PHP_VERSION_ID >= 70000
 +			zend_string_release(zcwd);
 +#endif
  			htscannerMutexUnlock(ini_entries_cache_mutex);
  			return SUCCESS;
  		}
 @@ -405,8 +462,19 @@ static int htscanner_main(TSRMLS_D) /* {{{ */
 @@ -380,7 +438,7 @@ static int htscanner_main(TSRMLS_D) /* {{{ */
  	/* parse, insert, assign */
  	if (HTG(default_ttl)) {
  		entry.created_on = t;
 -		entry.ini_entries = ini_entries = malloc(sizeof(HashTable));
 +		entry.ini_entries = ini_entries = emalloc(sizeof(HashTable));
  		if (ini_entries)
  			zend_hash_init(ini_entries, 0, NULL, NULL, 1);
  	}
 @@ -405,8 +463,13 @@ static int htscanner_main(TSRMLS_D) /* {{{ */
   		}
   	}
   
  +#if PHP_VERSION_ID < 70000
   	if (ini_entries)
   		zend_hash_update(ini_entries_cache, cwd, cwd_len, &entry, sizeof(htscanner_cache_entry), NULL);
  +#else
 +	if (ini_entries) {
 +		zend_string *entry_str = zend_string_init((void*)&entry, sizeof(htscanner_cache_entry), 0);
 +		zval zentry;
 +		ZVAL_STR(&zentry, entry_str);
 +		zend_hash_update(ini_entries_cache, zcwd, &zentry);
 +		zend_string_release(entry_str);
 +	}
 +	zend_string_release(zcwd);
 +	if (ini_entries)
 +		zend_hash_str_update_mem(ini_entries_cache, cwd, cwd_len, &entry, sizeof(htscanner_cache_entry));
  +#endif
   	htscannerMutexUnlock(ini_entries_cache_mutex);
  
  
   	return SUCCESS;
 @@ -451,7 +514,7 @@ static PHP_MSHUTDOWN_FUNCTION(htscanner) /* {{{ */
  	if (ini_entries_cache) {
  		htscannerMutexLock(ini_entries_cache_mutex);
  		zend_hash_destroy(ini_entries_cache);
 -		free(ini_entries_cache);
 +		efree(ini_entries_cache);
  		htscannerMutexShutdown(ini_entries_cache_mutex);
  	}
  
 
PHP Copyright © 2001-2022 The PHP Group
All rights reserved.
Last updated: Sat Jan 22 09:03:40 2022 UTC