@@ -58,7 +58,7 @@ static zend_result zend_restore_ini_entry_cb(zend_ini_entry *ini_entry, int stag
58
58
/* even if on_modify bails out, we have to continue on with restoring,
59
59
since there can be allocated variables that would be freed on MM shutdown
60
60
and would lead to memory corruption later ini entry is modified again */
61
- result = ini_entry -> on_modify (ini_entry , ini_entry -> orig_value , ini_entry -> mh_arg1 , ini_entry -> mh_arg2 , ini_entry -> mh_arg3 , stage );
61
+ result = ini_entry -> on_modify (ini_entry , ini_entry -> orig_value , ini_entry -> mh_arg1 , ini_entry -> mh_arg2 , ini_entry -> mh_arg3 , stage , NULL );
62
62
} zend_end_try ();
63
63
}
64
64
if (stage == ZEND_INI_STAGE_RUNTIME && result == FAILURE ) {
@@ -249,21 +249,20 @@ ZEND_API zend_result zend_register_ini_entries_ex(const zend_ini_entry_def *ini_
249
249
return FAILURE ;
250
250
}
251
251
252
- zend_string * prev_value = p -> value ;
253
-
252
+ bool modified = false;
254
253
if (((default_value = zend_get_configuration_directive (p -> name )) != NULL ) &&
255
- (!p -> on_modify || p -> on_modify (p , Z_STR_P (default_value ), p -> mh_arg1 , p -> mh_arg2 , p -> mh_arg3 , ZEND_INI_STAGE_STARTUP ) == SUCCESS )) {
254
+ (!p -> on_modify || p -> on_modify (p , Z_STR_P (default_value ), p -> mh_arg1 , p -> mh_arg2 , p -> mh_arg3 , ZEND_INI_STAGE_STARTUP , & modified ) == SUCCESS )) {
256
255
257
256
/* Skip assigning the value if the handler has already done so. */
258
- if (p -> value == prev_value ) {
257
+ if (! modified ) {
259
258
p -> value = zend_new_interned_string (zend_string_copy (Z_STR_P (default_value )));
260
259
}
261
260
} else {
262
261
p -> value = ini_entry -> value ?
263
262
zend_string_init_interned (ini_entry -> value , ini_entry -> value_length , 1 ) : NULL ;
264
263
265
264
if (p -> on_modify ) {
266
- p -> on_modify (p , p -> value , p -> mh_arg1 , p -> mh_arg2 , p -> mh_arg3 , ZEND_INI_STAGE_STARTUP );
265
+ p -> on_modify (p , p -> value , p -> mh_arg1 , p -> mh_arg2 , p -> mh_arg3 , ZEND_INI_STAGE_STARTUP , NULL );
267
266
}
268
267
}
269
268
ini_entry ++ ;
@@ -398,13 +397,14 @@ ZEND_API zend_result zend_alter_ini_entry_ex(zend_string *name, zend_string *new
398
397
zend_string * prev_value = ini_entry -> value ;
399
398
duplicate = zend_string_copy (new_value );
400
399
400
+ bool changed_by_on_modify = false;
401
401
if (!ini_entry -> on_modify
402
- || ini_entry -> on_modify (ini_entry , duplicate , ini_entry -> mh_arg1 , ini_entry -> mh_arg2 , ini_entry -> mh_arg3 , stage ) == SUCCESS ) {
402
+ || ini_entry -> on_modify (ini_entry , duplicate , ini_entry -> mh_arg1 , ini_entry -> mh_arg2 , ini_entry -> mh_arg3 , stage , & changed_by_on_modify ) == SUCCESS ) {
403
403
if (modified && ini_entry -> orig_value != prev_value ) { /* we already changed the value, free the changed value */
404
404
zend_string_release (prev_value );
405
405
}
406
406
/* Skip assigning the value if the handler has already done so. */
407
- if (ini_entry -> value == prev_value ) {
407
+ if (! changed_by_on_modify ) {
408
408
ini_entry -> value = duplicate ;
409
409
} else {
410
410
zend_string_release (duplicate );
0 commit comments