diff options
| author | Ilia Alshanetsky <iliaa@php.net> | 2008-03-13 15:56:21 +0000 |
|---|---|---|
| committer | Ilia Alshanetsky <iliaa@php.net> | 2008-03-13 15:56:21 +0000 |
| commit | 62b1449e47c2969bb934d84a932e4aa72e18f4d2 (patch) | |
| tree | ed43919e7334804ea1c7dc4167e4170a94aa94c5 /Zend | |
| parent | a8fc46afa7bf947ae4498d917cb65dd7e3202c7e (diff) | |
| download | php-git-62b1449e47c2969bb934d84a932e4aa72e18f4d2.tar.gz | |
Fixed bug #43677 (Inconsistent behaviour of include_path set with
php_value).
Diffstat (limited to 'Zend')
| -rw-r--r-- | Zend/zend_ini.c | 14 |
1 files changed, 11 insertions, 3 deletions
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); } |
