]> granicus.if.org Git - php/commitdiff
Fixed bug #43677 (Inconsistent behaviour of include_path set with
authorIlia Alshanetsky <iliaa@php.net>
Thu, 13 Mar 2008 15:56:21 +0000 (15:56 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Thu, 13 Mar 2008 15:56:21 +0000 (15:56 +0000)
php_value).

NEWS
Zend/zend_ini.c
ext/reflection/php_reflection.c

diff --git a/NEWS b/NEWS
index da2e4996b47ec2c3dbde7e69c811887e8d829980..fdbb6a22e51ea262113a9b6977df39c62f3d6246 100644 (file)
--- 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)
 
index 12cb479cbe90b6ed853781c724543d9c7cbd371b..ef526c7467d98d7d113ac6d92aae10d7156f245d 100644 (file)
@@ -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);
        }
index d6ec7060f2bdbb62c0a94a0768b5798296548caf..845ab3ec0dd7c61a0e23b5b0af91df2d3d85e51e 100644 (file)
@@ -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) {