@@ -46,6 +46,8 @@ int ini_parse(void);
46
46
#define YYFREE free
47
47
#endif
48
48
49
+ #define ZEND_SYSTEM_INI CG (ini_parser_unbuffered_errors)
50
+
49
51
/* {{{ zend_ini_do_op()
50
52
*/
51
53
static void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2)
@@ -86,15 +88,19 @@ static void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2)
86
88
}
87
89
88
90
str_len = zend_sprintf (str_result, " %d" , i_result);
89
- ZVAL_PSTRINGL (result, str_result, str_len);
91
+ ZVAL_NEW_STR (result, zend_string_init ( str_result, str_len, ZEND_SYSTEM_INI) );
90
92
}
91
93
/* }}} */
92
94
93
95
/* {{{ zend_ini_init_string()
94
96
*/
95
97
static void zend_ini_init_string (zval *result)
96
98
{
97
- ZVAL_EMPTY_PSTRING (result);
99
+ if (ZEND_SYSTEM_INI) {
100
+ ZVAL_EMPTY_PSTRING (result);
101
+ } else {
102
+ ZVAL_EMPTY_STRING (result);
103
+ }
98
104
}
99
105
/* }}} */
100
106
@@ -107,7 +113,11 @@ static void zend_ini_add_string(zval *result, zval *op1, zval *op2)
107
113
if (Z_TYPE_P (op1) != IS_STRING) {
108
114
zend_string *str = zval_get_string (op1);
109
115
/* ZEND_ASSERT(!Z_REFCOUNTED_P(op1)); */
110
- ZVAL_PSTRINGL (op1, ZSTR_VAL (str), ZSTR_LEN (str));
116
+ if (ZEND_SYSTEM_INI) {
117
+ ZVAL_PSTRINGL (op1, ZSTR_VAL (str), ZSTR_LEN (str));
118
+ } else {
119
+ ZVAL_STR (op1, str);
120
+ }
111
121
zend_string_release (str);
112
122
}
113
123
op1_len = (int )Z_STRLEN_P (op1);
@@ -117,7 +127,7 @@ static void zend_ini_add_string(zval *result, zval *op1, zval *op2)
117
127
}
118
128
length = op1_len + (int )Z_STRLEN_P (op2);
119
129
120
- ZVAL_NEW_STR (result, zend_string_extend (Z_STR_P (op1), length, 1 ));
130
+ ZVAL_NEW_STR (result, zend_string_extend (Z_STR_P (op1), length, ZEND_SYSTEM_INI ));
121
131
memcpy (Z_STRVAL_P (result) + op1_len, Z_STRVAL_P (op2), Z_STRLEN_P (op2) + 1 );
122
132
}
123
133
/* }}} */
@@ -140,7 +150,7 @@ static void zend_ini_get_constant(zval *result, zval *name)
140
150
convert_to_string (&tmp);
141
151
c = &tmp;
142
152
}
143
- ZVAL_PSTRINGL (result, Z_STRVAL_P (c), Z_STRLEN_P (c));
153
+ ZVAL_NEW_STR (result, zend_string_init ( Z_STRVAL_P (c), Z_STRLEN_P (c), ZEND_SYSTEM_INI ));
144
154
if (c == &tmp) {
145
155
zend_string_release (Z_STR (tmp));
146
156
}
@@ -160,11 +170,11 @@ static void zend_ini_get_var(zval *result, zval *name)
160
170
161
171
/* Fetch configuration option value */
162
172
if ((curval = zend_get_configuration_directive (Z_STR_P (name))) != NULL ) {
163
- ZVAL_PSTRINGL (result, Z_STRVAL_P (curval), Z_STRLEN_P (curval));
173
+ ZVAL_NEW_STR (result, zend_string_init ( Z_STRVAL_P (curval), Z_STRLEN_P (curval), ZEND_SYSTEM_INI ));
164
174
/* ..or if not found, try ENV */
165
175
} else if ((envvar = zend_getenv (Z_STRVAL_P (name), Z_STRLEN_P (name))) != NULL ||
166
176
(envvar = getenv (Z_STRVAL_P (name))) != NULL ) {
167
- ZVAL_PSTRING (result, envvar);
177
+ ZVAL_NEW_STR (result, zend_string_init ( envvar, strlen (envvar), ZEND_SYSTEM_INI) );
168
178
} else {
169
179
zend_ini_init_string (result);
170
180
}
@@ -282,6 +292,8 @@ ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, int s
282
292
%left ' |' ' &' ' ^'
283
293
%right ' ~' ' !'
284
294
295
+ %destructor { zval_ptr_dtor(&$$); } TC_RAW TC_CONSTANT TC_NUMBER TC_STRING TC_WHITESPACE TC_LABEL TC_OFFSET TC_VARNAME BOOL_TRUE BOOL_FALSE NULL_NULL
296
+
285
297
%%
286
298
287
299
statement_list:
0 commit comments