@@ -46,12 +46,18 @@ void free_zend_constant(zval *zv)
4646 if (c -> name ) {
4747 zend_string_release_ex (c -> name , 0 );
4848 }
49+ if (c -> filename ) {
50+ zend_string_release_ex (c -> filename , 0 );
51+ }
4952 efree (c );
5053 } else {
5154 zval_internal_ptr_dtor (& c -> value );
5255 if (c -> name ) {
5356 zend_string_release_ex (c -> name , 1 );
5457 }
58+ if (c -> filename ) {
59+ zend_string_release_ex (c -> filename , 1 );
60+ }
5561 free (c );
5662 }
5763}
@@ -68,6 +74,9 @@ static void copy_zend_constant(zval *zv)
6874
6975 c = Z_PTR_P (zv );
7076 c -> name = zend_string_copy (c -> name );
77+ if (c -> filename != NULL ) {
78+ c -> filename = zend_string_copy (c -> filename );
79+ }
7180 if (Z_TYPE (c -> value ) == IS_STRING ) {
7281 Z_STR (c -> value ) = zend_string_dup (Z_STR (c -> value ), 1 );
7382 }
@@ -123,6 +132,7 @@ ZEND_API void zend_register_null_constant(const char *name, size_t name_len, int
123132 ZVAL_NULL (& c .value );
124133 ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
125134 c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
135+ c .filename = NULL ;
126136 zend_register_constant (& c );
127137}
128138
@@ -133,6 +143,7 @@ ZEND_API void zend_register_bool_constant(const char *name, size_t name_len, boo
133143 ZVAL_BOOL (& c .value , bval );
134144 ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
135145 c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
146+ c .filename = NULL ;
136147 zend_register_constant (& c );
137148}
138149
@@ -143,6 +154,7 @@ ZEND_API void zend_register_long_constant(const char *name, size_t name_len, zen
143154 ZVAL_LONG (& c .value , lval );
144155 ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
145156 c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
157+ c .filename = NULL ;
146158 zend_register_constant (& c );
147159}
148160
@@ -154,6 +166,7 @@ ZEND_API void zend_register_double_constant(const char *name, size_t name_len, d
154166 ZVAL_DOUBLE (& c .value , dval );
155167 ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
156168 c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
169+ c .filename = NULL ;
157170 zend_register_constant (& c );
158171}
159172
@@ -165,6 +178,7 @@ ZEND_API void zend_register_stringl_constant(const char *name, size_t name_len,
165178 ZVAL_STR (& c .value , zend_string_init_interned (strval , strlen , flags & CONST_PERSISTENT ));
166179 ZEND_CONSTANT_SET_FLAGS (& c , flags , module_number );
167180 c .name = zend_string_init_interned (name , name_len , flags & CONST_PERSISTENT );
181+ c .filename = NULL ;
168182 zend_register_constant (& c );
169183}
170184
@@ -502,6 +516,10 @@ ZEND_API zend_result zend_register_constant(zend_constant *c)
502516 ) {
503517 zend_error (E_WARNING , "Constant %s already defined" , ZSTR_VAL (name ));
504518 zend_string_release (c -> name );
519+ if (c -> filename ) {
520+ zend_string_release (c -> filename );
521+ c -> filename = NULL ;
522+ }
505523 if (!persistent ) {
506524 zval_ptr_dtor_nogc (& c -> value );
507525 }
0 commit comments