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-07-03 10:11 UTC

Return to Bug #72269 | Download this patch
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

Line 1 (now 1), was 19 lines, now 17 lines
 diff --git a/htscanner.c b/htscanner.c
 index 55bc68b..a79149d 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
 --- htscanner.c	2012-03-01 16:14:32.000000000 +0100
 +++ htscanner.c	2016-07-03 12:08:30.700863832 +0200
 @@ -147,18 +147,40 @@
   #endif
   #if PHP_VERSION_ID < 50204
   	if (zend_alter_ini_entry(name, name_len + 1, value, value_len, mode, PHP_INI_STAGE_RUNTIME) == FAILURE) {
  -#else
  +#elif PHP_VERSION_ID < 70000
   	if (zend_alter_ini_entry(name, name_len + 1, value, value_len, mode, PHP_INI_STAGE_HTACCESS) == FAILURE) {
  +#else
  +	zend_string *zname, *zvalue;
 +	zname = zend_string_init(name, name_len, 0);
 +	zvalue = zend_string_init(value, value_len, 0);
 +	zname = zend_string_init(name, name_len, 1);
 +	zvalue = zend_string_init(value, value_len, 1);
  +	int res = zend_alter_ini_entry(zname, zvalue, mode, PHP_INI_STAGE_HTACCESS);
  +	if (res == FAILURE) {
   #endif
   		htscanner_debug("zend_alter_ini_entry failed!");


  +	ZVAL_STR(&zval_value, zvalue);
  +
  +	if (ini_entries)
  +		zend_hash_update(ini_entries, zname, &zval_value);
 +	else
 +		zend_string_release(zvalue);
  +
  +	zend_string_release(zname);
 +	zend_string_release(zvalue);
  +#endif
   
   	return SUCCESS;
   }
 @@ -186,7 +207,11 @@ static void parse_config_file(char *file, HashTable *ini_entries TSRMLS_DC)
 @@ -186,7 +208,11 @@
   	}
   #endif
   
  +#if PHP_VERSION_ID < 70000


  +#endif
   	if (stream != NULL) {
   		char buf[FILE_BUFFER], *bufp, *tok, *value;
   		int flag, parse = 1;
 @@ -259,7 +284,7 @@ ZEND_GET_MODULE(htscanner)
 @@ -259,7 +285,7 @@
   PHP_INI_BEGIN()
   	STD_PHP_INI_ENTRY("htscanner.config_file", ".htaccess", PHP_INI_SYSTEM, OnUpdateString, config_file, zend_htscanner_globals, htscanner_globals)
   	STD_PHP_INI_ENTRY("htscanner.default_docroot", "/", PHP_INI_SYSTEM, OnUpdateString, default_docroot, zend_htscanner_globals, htscanner_globals)
  -#if (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION > 0)
  +#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,12 +300,23 @@
  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);
  }
  /* }}} */
 +#else
 +static void ini_cache_entry_dtor(zval *zentry) /* {{{ */
 +{
 +	htscanner_cache_entry *entry = Z_PTR_P(zentry);
 +	zend_hash_destroy(entry->ini_entries);
 +	free(entry->ini_entries);
 +	free(entry);
 +}
 +/* }}} */
 +#endif
  
  static int php_htscanner_create_cache() /* {{{ */
  {
 @@ -347,31 +384,57 @@
   #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 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
   			char *value, *name;
  -			HashPosition pos;
   			uint len;
 +			HashPosition pos;
  +#else
  +			zend_string *name;
  +			zval *value;
  +#endif
 +			HashPosition pos;
   			ulong num;
  
  
 +#if PHP_VERSION_ID < 70000
   			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)) {
 +				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));
 +			ZEND_HASH_FOREACH_KEY_VAL(entry_fetched->ini_entries, num, name, value) {
 +				htscanner_debug("setting: %s = %s (cache hit)", (char*)ZSTR_VAL(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) {
 +				int res = zend_alter_ini_entry(name, Z_STR_P(value), PHP_INI_PERDIR, PHP_INI_STAGE_HTACCESS);
 +				if (res == 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", (char*)ZSTR_VAL(name), Z_STR_P(value));
  +#endif
   					htscannerMutexUnlock(ini_entries_cache_mutex);
   					RETURN_FAILURE(msg);
   				}
 +#if PHP_VERSION_ID < 70000
   				zend_hash_move_forward_ex(entry_fetched->ini_entries, &pos);
   			}
 +#if PHP_VERSION_ID >= 70000
 +			zend_string_release(zcwd);
 +#else
 +			} ZEND_HASH_FOREACH_END();
  +#endif
   			htscannerMutexUnlock(ini_entries_cache_mutex);
   			return SUCCESS;
   		}
 @@ -405,8 +462,19 @@ static int htscanner_main(TSRMLS_D) /* {{{ */
 @@ -405,8 +468,13 @@
   		}
   	}
   
  +#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;
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Thu Dec 02 23:03:35 2021 UTC