@@ -46,12 +46,18 @@ void free_zend_constant(zval *zv)
46
46
if (c -> name ) {
47
47
zend_string_release_ex (c -> name , 0 );
48
48
}
49
+ if (c -> filename ) {
50
+ zend_string_release_ex (c -> filename , 0 );
51
+ }
49
52
efree (c );
50
53
} else {
51
54
zval_internal_ptr_dtor (& c -> value );
52
55
if (c -> name ) {
53
56
zend_string_release_ex (c -> name , 1 );
54
57
}
58
+ if (c -> filename ) {
59
+ zend_string_release_ex (c -> filename , 1 );
60
+ }
55
61
free (c );
56
62
}
57
63
}
@@ -68,6 +74,9 @@ static void copy_zend_constant(zval *zv)
68
74
69
75
c = Z_PTR_P (zv );
70
76
c -> name = zend_string_copy (c -> name );
77
+ if (c -> filename != NULL ) {
78
+ c -> filename = zend_string_copy (c -> filename );
79
+ }
71
80
if (Z_TYPE (c -> value ) == IS_STRING ) {
72
81
Z_STR (c -> value ) = zend_string_dup (Z_STR (c -> value ), 1 );
73
82
}
@@ -123,6 +132,7 @@ ZEND_API void zend_register_null_constant(const char *name, size_t name_len, int
123
132
ZVAL_NULL (& c .value );
124
133
ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
125
134
c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
135
+ c .filename = NULL ;
126
136
zend_register_constant (& c );
127
137
}
128
138
@@ -133,6 +143,7 @@ ZEND_API void zend_register_bool_constant(const char *name, size_t name_len, boo
133
143
ZVAL_BOOL (& c .value , bval );
134
144
ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
135
145
c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
146
+ c .filename = NULL ;
136
147
zend_register_constant (& c );
137
148
}
138
149
@@ -143,6 +154,7 @@ ZEND_API void zend_register_long_constant(const char *name, size_t name_len, zen
143
154
ZVAL_LONG (& c .value , lval );
144
155
ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
145
156
c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
157
+ c .filename = NULL ;
146
158
zend_register_constant (& c );
147
159
}
148
160
@@ -154,6 +166,7 @@ ZEND_API void zend_register_double_constant(const char *name, size_t name_len, d
154
166
ZVAL_DOUBLE (& c .value , dval );
155
167
ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
156
168
c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
169
+ c .filename = NULL ;
157
170
zend_register_constant (& c );
158
171
}
159
172
@@ -165,6 +178,7 @@ ZEND_API void zend_register_stringl_constant(const char *name, size_t name_len,
165
178
ZVAL_STR (& c .value , zend_string_init_interned (strval , strlen , flags & CONST_PERSISTENT ));
166
179
ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
167
180
c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
181
+ c .filename = NULL ;
168
182
zend_register_constant (& c );
169
183
}
170
184
@@ -502,6 +516,10 @@ ZEND_API zend_result zend_register_constant(zend_constant *c)
502
516
) {
503
517
zend_error (E_WARNING , "Constant %s already defined" , ZSTR_VAL (name ));
504
518
zend_string_release (c -> name );
519
+ if (c -> filename ) {
520
+ zend_string_release (c -> filename );
521
+ c -> filename = NULL ;
522
+ }
505
523
if (!persistent ) {
506
524
zval_ptr_dtor_nogc (& c -> value );
507
525
}
0 commit comments