@@ -119,16 +119,12 @@ PHP_METHOD(Uri_WhatWg_InvalidUrlException, __construct)
119119 Z_PARAM_OBJECT_OF_CLASS_OR_NULL (previous , zend_ce_throwable )
120120 ZEND_PARSE_PARAMETERS_END ();
121121
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 ();
129124 }
130125
131126 if (errors == NULL ) {
127+ zval tmp ;
132128 ZVAL_EMPTY_ARRAY (& tmp );
133129 zend_update_property (uri_whatwg_invalid_url_exception_ce , Z_OBJ_P (ZEND_THIS ), ZEND_STRL ("errors" ), & tmp );
134130 } else {
@@ -137,21 +133,6 @@ PHP_METHOD(Uri_WhatWg_InvalidUrlException, __construct)
137133 if (EG (exception )) {
138134 RETURN_THROWS ();
139135 }
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- }
155136}
156137
157138PHP_METHOD (Uri_WhatWg_UrlValidationError , __construct )
@@ -184,20 +165,30 @@ PHP_METHOD(Uri_WhatWg_UrlValidationError, __construct)
184165 }
185166}
186167
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 )
188173{
189174 ZEND_ASSERT (Z_TYPE_P (errors ) == IS_UNDEF || Z_TYPE_P (errors ) == IS_ARRAY );
190175
176+ /* There was no error during parsing */
191177 if (Z_ISUNDEF_P (errors )) {
192178 return SUCCESS ;
193179 }
194180
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 */
195184 if (errors_zv == NULL) {
185+ zval_ptr_dtor (errors );
196186 return SUCCESS ;
197187 }
198188
199189 ZEND_TRY_ASSIGN_REF_ARR (errors_zv , Z_ARRVAL_P (errors ));
200190 if (EG (exception )) {
191+ zval_ptr_dtor (errors );
201192 return FAILURE ;
202193 }
203194
@@ -225,14 +216,14 @@ PHPAPI void php_uri_instantiate_uri(
225216 zval_ptr_dtor (& errors );
226217 RETURN_THROWS ();
227218 } else {
228- if (pass_errors_by_ref (errors_zv , & errors ) == FAILURE ) {
219+ if (pass_errors_by_ref_and_free (errors_zv , & errors ) == FAILURE ) {
229220 RETURN_THROWS ();
230221 }
231222 RETURN_NULL ();
232223 }
233224 }
234225
235- if (pass_errors_by_ref (errors_zv , & errors ) == FAILURE ) {
226+ if (pass_errors_by_ref_and_free (errors_zv , & errors ) == FAILURE ) {
236227 RETURN_THROWS ();
237228 }
238229
@@ -388,93 +379,87 @@ static void uri_unserialize(INTERNAL_FUNCTION_PARAMETERS, const char *handler_na
388379
389380PHP_METHOD (Uri_WhatWg_Url , getScheme )
390381{
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 );
393383}
394384
395385PHP_METHOD (Uri_WhatWg_Url , withScheme )
396386{
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 );
398388}
399389
400390PHP_METHOD (Uri_WhatWg_Url , getUsername )
401391{
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 );
404393}
405394
406395PHP_METHOD (Uri_WhatWg_Url , withUsername )
407396{
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 );
409398}
410399
411400PHP_METHOD (Uri_WhatWg_Url , getPassword )
412401{
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 );
415403}
416404
417405PHP_METHOD (Uri_WhatWg_Url , withPassword )
418406{
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 );
420408}
421409
422410PHP_METHOD (Uri_WhatWg_Url , getAsciiHost )
423411{
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 );
425413}
426414
427415PHP_METHOD (Uri_WhatWg_Url , getUnicodeHost )
428416{
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 );
431418}
432419
433420PHP_METHOD (Uri_WhatWg_Url , withHost )
434421{
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 );
436423}
437424
438425PHP_METHOD (Uri_WhatWg_Url , getPort )
439426{
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 );
441428}
442429
443430PHP_METHOD (Uri_WhatWg_Url , withPort )
444431{
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 );
446433}
447434
448435PHP_METHOD (Uri_WhatWg_Url , getPath )
449436{
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 );
451438}
452439
453440PHP_METHOD (Uri_WhatWg_Url , withPath )
454441{
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 );
456443}
457444
458445PHP_METHOD (Uri_WhatWg_Url , getQuery )
459446{
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 );
462448}
463449
464450PHP_METHOD (Uri_WhatWg_Url , withQuery )
465451{
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 );
467453}
468454
469455PHP_METHOD (Uri_WhatWg_Url , getFragment )
470456{
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 );
473458}
474459
475460PHP_METHOD (Uri_WhatWg_Url , withFragment )
476461{
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 );
478463}
479464
480465PHP_METHOD (Uri_WhatWg_Url , equals )
@@ -557,7 +542,7 @@ PHP_METHOD(Uri_WhatWg_Url, __serialize)
557542
558543 /* Serialize regular properties: second array */
559544 ZVAL_ARR (& arr , this_object -> handlers -> get_properties (this_object ));
560- Z_TRY_ADDREF (arr );
545+ Z_ADDREF (arr );
561546 zend_hash_next_index_insert (Z_ARRVAL_P (return_value ), & arr );
562547}
563548
0 commit comments