From 62b1449e47c2969bb934d84a932e4aa72e18f4d2 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Thu, 13 Mar 2008 15:56:21 +0000 Subject: [PATCH] Fixed bug #43677 (Inconsistent behaviour of include_path set with php_value). --- NEWS | 2 ++ Zend/zend_ini.c | 14 +++++++++++--- ext/reflection/php_reflection.c | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index da2e4996b4..fdbb6a22e5 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ PHP NEWS - Fixed bug #44394 (Last two bytes missing from output). (Felipe) - Fixed bug #44388 (Crash inside exif_read_data() on invalid images) (Ilia) - Fixed bug #44373 (PDO_OCI extension compile failed). (Felipe) +- Fixed bug #43677 (Inconsistent behaviour of include_path set with + php_value). (manuel at mausz dot at) - Fixed bug #42177 (Warning "array_merge_recursive(): recursion detected" comes again...). (Felipe) diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index 12cb479cbe..ef526c7467 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -63,6 +63,9 @@ static int zend_restore_ini_entry_cb(zend_ini_entry *ini_entry, int stage TSRMLS ini_entry->modified = 0; ini_entry->orig_value = NULL; ini_entry->orig_value_length = 0; + if (ini_entry->modifiable >= (1 << 3)) { + ini_entry->modifiable >>= 3; + } } return 0; } @@ -244,6 +247,7 @@ ZEND_API int zend_alter_ini_entry_ex(char *name, uint name_length, char *new_val { zend_ini_entry *ini_entry; char *duplicate; + zend_bool modifiable; zend_bool modified; TSRMLS_FETCH(); @@ -251,8 +255,12 @@ ZEND_API int zend_alter_ini_entry_ex(char *name, uint name_length, char *new_val return FAILURE; } + modifiable = ini_entry->modifiable; + modified = ini_entry->modified; + if (stage == ZEND_INI_STAGE_ACTIVATE && modify_type == ZEND_INI_SYSTEM) { - ini_entry->modifiable = ZEND_INI_SYSTEM; + /* only touch lower bits */ + ini_entry->modifiable = (ini_entry->modifiable & (ZEND_INI_ALL << 3)) | ZEND_INI_SYSTEM; } if (!force_change) { @@ -261,8 +269,6 @@ ZEND_API int zend_alter_ini_entry_ex(char *name, uint name_length, char *new_val } } - modified = ini_entry->modified; - if (!EG(modified_ini_directives)) { ALLOC_HASHTABLE(EG(modified_ini_directives)); zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0); @@ -270,6 +276,8 @@ ZEND_API int zend_alter_ini_entry_ex(char *name, uint name_length, char *new_val if (!modified) { ini_entry->orig_value = ini_entry->value; ini_entry->orig_value_length = ini_entry->value_length; + /* store orginial value in the upper bits */ + ini_entry->modifiable = (modifiable << 3) | ini_entry->modifiable; ini_entry->modified = 1; zend_hash_add(EG(modified_ini_directives), name, name_length, &ini_entry, sizeof(zend_ini_entry*), NULL); } diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index d6ec7060f2..845ab3ec0d 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -836,7 +836,7 @@ static int _extension_ini_string(zend_ini_entry *ini_entry, int num_args, va_lis if (number == ini_entry->module_number) { string_printf(str, " %sEntry [ %s <", indent, ini_entry->name); - if (ini_entry->modifiable == ZEND_INI_ALL) { + if (ini_entry->modifiable & ZEND_INI_ALL) { string_printf(str, "ALL"); } else { if (ini_entry->modifiable & ZEND_INI_USER) { -- 2.50.1