@@ -119,16 +119,12 @@ PHP_METHOD(Uri_WhatWg_InvalidUrlException, __construct)
119
119
Z_PARAM_OBJECT_OF_CLASS_OR_NULL (previous , zend_ce_throwable )
120
120
ZEND_PARSE_PARAMETERS_END ();
121
121
122
- zval tmp ;
123
- if (message != NULL ) {
124
- ZVAL_STR (& tmp , message );
125
- zend_update_property_ex (uri_whatwg_invalid_url_exception_ce , Z_OBJ_P (ZEND_THIS ), ZSTR_KNOWN (ZEND_STR_MESSAGE ), & tmp );
126
- if (EG (exception )) {
127
- RETURN_THROWS ();
128
- }
122
+ if (zend_update_exception_properties (INTERNAL_FUNCTION_PARAM_PASSTHRU , message , code , previous ) == FAILURE ) {
123
+ RETURN_THROWS ();
129
124
}
130
125
131
126
if (errors == NULL ) {
127
+ zval tmp ;
132
128
ZVAL_EMPTY_ARRAY (& tmp );
133
129
zend_update_property (uri_whatwg_invalid_url_exception_ce , Z_OBJ_P (ZEND_THIS ), ZEND_STRL ("errors" ), & tmp );
134
130
} else {
@@ -137,21 +133,6 @@ PHP_METHOD(Uri_WhatWg_InvalidUrlException, __construct)
137
133
if (EG (exception )) {
138
134
RETURN_THROWS ();
139
135
}
140
-
141
- if (code != 0 ) {
142
- ZVAL_LONG (& tmp , code );
143
- zend_update_property_ex (uri_whatwg_invalid_url_exception_ce , Z_OBJ_P (ZEND_THIS ), ZSTR_KNOWN (ZEND_STR_CODE ), & tmp );
144
- if (EG (exception )) {
145
- RETURN_THROWS ();
146
- }
147
- }
148
-
149
- if (previous != NULL ) {
150
- zend_update_property_ex (zend_ce_exception , Z_OBJ_P (ZEND_THIS ), ZSTR_KNOWN (ZEND_STR_PREVIOUS ), previous );
151
- if (EG (exception )) {
152
- RETURN_THROWS ();
153
- }
154
- }
155
136
}
156
137
157
138
PHP_METHOD (Uri_WhatWg_UrlValidationError , __construct )
@@ -184,20 +165,30 @@ PHP_METHOD(Uri_WhatWg_UrlValidationError, __construct)
184
165
}
185
166
}
186
167
187
- static zend_result pass_errors_by_ref (zval * errors_zv , zval * errors )
168
+ /**
169
+ * Pass the errors parameter by ref to errors_zv for userland, and frees it if
170
+ * it is not not needed anymore.
171
+ */
172
+ static zend_result pass_errors_by_ref_and_free (zval * errors_zv , zval * errors )
188
173
{
189
174
ZEND_ASSERT (Z_TYPE_P (errors ) == IS_UNDEF || Z_TYPE_P (errors ) == IS_ARRAY );
190
175
176
+ /* There was no error during parsing */
191
177
if (Z_ISUNDEF_P (errors )) {
192
178
return SUCCESS ;
193
179
}
194
180
181
+ /* The errors parameter is an array, but the pass-by ref argument stored by
182
+ * errors_zv was not passed - the URI implementation either doesn't support
183
+ * returning additional error information, or the caller is not interested in it */
195
184
if (errors_zv == NULL) {
185
+ zval_ptr_dtor (errors );
196
186
return SUCCESS ;
197
187
}
198
188
199
189
ZEND_TRY_ASSIGN_REF_ARR (errors_zv , Z_ARRVAL_P (errors ));
200
190
if (EG (exception )) {
191
+ zval_ptr_dtor (errors );
201
192
return FAILURE ;
202
193
}
203
194
@@ -225,14 +216,14 @@ PHPAPI void php_uri_instantiate_uri(
225
216
zval_ptr_dtor (& errors );
226
217
RETURN_THROWS ();
227
218
} else {
228
- if (pass_errors_by_ref (errors_zv , & errors ) == FAILURE ) {
219
+ if (pass_errors_by_ref_and_free (errors_zv , & errors ) == FAILURE ) {
229
220
RETURN_THROWS ();
230
221
}
231
222
RETURN_NULL ();
232
223
}
233
224
}
234
225
235
- if (pass_errors_by_ref (errors_zv , & errors ) == FAILURE ) {
226
+ if (pass_errors_by_ref_and_free (errors_zv , & errors ) == FAILURE ) {
236
227
RETURN_THROWS ();
237
228
}
238
229
@@ -388,93 +379,87 @@ static void uri_unserialize(INTERNAL_FUNCTION_PARAMETERS, const char *handler_na
388
379
389
380
PHP_METHOD (Uri_WhatWg_Url , getScheme )
390
381
{
391
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN (ZEND_STR_SCHEME ),
392
- URI_COMPONENT_READ_NORMALIZED_ASCII );
382
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_SCHEME , URI_COMPONENT_READ_NORMALIZED_ASCII );
393
383
}
394
384
395
385
PHP_METHOD (Uri_WhatWg_Url , withScheme )
396
386
{
397
- uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_SCHEME ) );
387
+ uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_SCHEME );
398
388
}
399
389
400
390
PHP_METHOD (Uri_WhatWg_Url , getUsername )
401
391
{
402
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN (ZEND_STR_USERNAME ),
403
- URI_COMPONENT_READ_NORMALIZED_ASCII );
392
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_USERNAME , URI_COMPONENT_READ_NORMALIZED_ASCII );
404
393
}
405
394
406
395
PHP_METHOD (Uri_WhatWg_Url , withUsername )
407
396
{
408
- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_USERNAME ) );
397
+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_USERNAME );
409
398
}
410
399
411
400
PHP_METHOD (Uri_WhatWg_Url , getPassword )
412
401
{
413
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN (ZEND_STR_PASSWORD ),
414
- URI_COMPONENT_READ_NORMALIZED_ASCII );
402
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PASSWORD , URI_COMPONENT_READ_NORMALIZED_ASCII );
415
403
}
416
404
417
405
PHP_METHOD (Uri_WhatWg_Url , withPassword )
418
406
{
419
- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_PASSWORD ) );
407
+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PASSWORD );
420
408
}
421
409
422
410
PHP_METHOD (Uri_WhatWg_Url , getAsciiHost )
423
411
{
424
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_HOST ) , URI_COMPONENT_READ_NORMALIZED_ASCII );
412
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST , URI_COMPONENT_READ_NORMALIZED_ASCII );
425
413
}
426
414
427
415
PHP_METHOD (Uri_WhatWg_Url , getUnicodeHost )
428
416
{
429
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN (ZEND_STR_HOST ),
430
- URI_COMPONENT_READ_NORMALIZED_UNICODE );
417
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST , URI_COMPONENT_READ_NORMALIZED_UNICODE );
431
418
}
432
419
433
420
PHP_METHOD (Uri_WhatWg_Url , withHost )
434
421
{
435
- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_HOST ) );
422
+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_HOST );
436
423
}
437
424
438
425
PHP_METHOD (Uri_WhatWg_Url , getPort )
439
426
{
440
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_PORT ) , URI_COMPONENT_READ_NORMALIZED_ASCII );
427
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT , URI_COMPONENT_READ_NORMALIZED_ASCII );
441
428
}
442
429
443
430
PHP_METHOD (Uri_WhatWg_Url , withPort )
444
431
{
445
- uri_write_component_long_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_PORT ) );
432
+ uri_write_component_long_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PORT );
446
433
}
447
434
448
435
PHP_METHOD (Uri_WhatWg_Url , getPath )
449
436
{
450
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_PATH ) , URI_COMPONENT_READ_NORMALIZED_ASCII );
437
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH , URI_COMPONENT_READ_NORMALIZED_ASCII );
451
438
}
452
439
453
440
PHP_METHOD (Uri_WhatWg_Url , withPath )
454
441
{
455
- uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_PATH ) );
442
+ uri_write_component_str (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_PATH );
456
443
}
457
444
458
445
PHP_METHOD (Uri_WhatWg_Url , getQuery )
459
446
{
460
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN (ZEND_STR_QUERY ),
461
- URI_COMPONENT_READ_NORMALIZED_ASCII );
447
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY , URI_COMPONENT_READ_NORMALIZED_ASCII );
462
448
}
463
449
464
450
PHP_METHOD (Uri_WhatWg_Url , withQuery )
465
451
{
466
- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_QUERY ) );
452
+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_QUERY );
467
453
}
468
454
469
455
PHP_METHOD (Uri_WhatWg_Url , getFragment )
470
456
{
471
- uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN (ZEND_STR_FRAGMENT ),
472
- URI_COMPONENT_READ_NORMALIZED_ASCII );
457
+ uri_read_component (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT , URI_COMPONENT_READ_NORMALIZED_ASCII );
473
458
}
474
459
475
460
PHP_METHOD (Uri_WhatWg_Url , withFragment )
476
461
{
477
- uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , ZSTR_KNOWN ( ZEND_STR_FRAGMENT ) );
462
+ uri_write_component_str_or_null (INTERNAL_FUNCTION_PARAM_PASSTHRU , URI_PROPERTY_NAME_FRAGMENT );
478
463
}
479
464
480
465
PHP_METHOD (Uri_WhatWg_Url , equals )
@@ -557,7 +542,7 @@ PHP_METHOD(Uri_WhatWg_Url, __serialize)
557
542
558
543
/* Serialize regular properties: second array */
559
544
ZVAL_ARR (& arr , this_object -> handlers -> get_properties (this_object ));
560
- Z_TRY_ADDREF (arr );
545
+ Z_ADDREF (arr );
561
546
zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & arr );
562
547
}
563
548
0 commit comments