25
25
26
26
static zend_result lexbor_init_parser (void );
27
27
static void * lexbor_parse_uri (const zend_string * url_str , const zend_string * base_url_str , zval * errors );
28
+ static void lexbor_create_invalid_uri_exception (zval * exception_zv , zval * errors );
28
29
static void * lexbor_clone_uri (void * uri );
29
30
static zend_string * lexbor_uri_to_string (void * uri , uri_recomposition_mode_t recomposition_mode , bool exclude_fragment );
30
31
static void lexbor_free_uri (void * uri );
@@ -39,6 +40,7 @@ const uri_handler_t lexbor_uri_handler = {
39
40
URI_PARSER_WHATWG ,
40
41
lexbor_init_parser ,
41
42
lexbor_parse_uri ,
43
+ lexbor_create_invalid_uri_exception ,
42
44
lexbor_clone_uri ,
43
45
lexbor_uri_to_string ,
44
46
lexbor_free_uri ,
@@ -284,7 +286,7 @@ static zend_result lexbor_write_scheme(uri_internal_t *internal_uri, zval *value
284
286
CHECK_WRITE_RESULT (status , lexbor_uri , str , errors );
285
287
}
286
288
287
- static zend_result lexbor_read_user (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
289
+ static zend_result lexbor_read_username (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
288
290
{
289
291
lxb_url_t * lexbor_uri = (lxb_url_t * ) internal_uri -> uri ;
290
292
@@ -297,7 +299,7 @@ static zend_result lexbor_read_user(const uri_internal_t *internal_uri, uri_comp
297
299
return SUCCESS ;
298
300
}
299
301
300
- static zend_result lexbor_write_user (uri_internal_t * internal_uri , zval * value , zval * errors )
302
+ static zend_result lexbor_write_username (uri_internal_t * internal_uri , zval * value , zval * errors )
301
303
{
302
304
lxb_url_t * lexbor_uri = (lxb_url_t * ) internal_uri -> uri ;
303
305
lexbor_str_t str = {0 };
@@ -339,22 +341,19 @@ static zend_result lexbor_read_host(const uri_internal_t *internal_uri, uri_comp
339
341
lxb_url_t * lexbor_uri = (lxb_url_t * ) internal_uri -> uri ;
340
342
341
343
if (lexbor_uri -> host .type == LXB_URL_HOST_TYPE_IPV4 ) {
342
- struct in_addr myaddr ;
343
- myaddr .s_addr = htonl ((zend_ulong ) & lexbor_uri -> host .u .ipv4 );
344
- char buffer [17 ];
344
+ smart_str host_str = {0 };
345
345
346
- const char * result = inet_ntop (AF_INET , & myaddr , buffer , sizeof (buffer ));
347
- ZEND_ASSERT (result != NULL );
346
+ lxb_url_serialize_host_ipv4 ((zend_ulong ) lexbor_uri -> host .u .ipv4 , lexbor_serialize_callback , (void * ) & host_str );
348
347
349
- ZVAL_STRING (retval , buffer );
348
+ ZVAL_STR (retval , smart_str_extract ( & host_str ) );
350
349
} else if (lexbor_uri -> host .type == LXB_URL_HOST_TYPE_IPV6 ) {
351
- char buffer [ 46 ] ;
350
+ smart_str host_str = { 0 } ;
352
351
353
- php_sprintf ( buffer , "[%hu:%hu:%hu:%hu:%hu:%hu:%hu:%hu]" , lexbor_uri -> host . u . ipv6 [ 0 ], lexbor_uri -> host . u . ipv6 [ 1 ],
354
- lexbor_uri -> host .u .ipv6 [ 2 ], lexbor_uri -> host . u . ipv6 [ 3 ], lexbor_uri -> host . u . ipv6 [ 4 ], lexbor_uri -> host . u . ipv6 [ 5 ],
355
- lexbor_uri -> host . u . ipv6 [ 6 ], lexbor_uri -> host . u . ipv6 [ 7 ] );
352
+ smart_str_appendc ( & host_str , '[' );
353
+ lxb_url_serialize_host_ipv6 ( lexbor_uri -> host .u .ipv6 , lexbor_serialize_callback , ( void * ) & host_str );
354
+ smart_str_appendc ( & host_str , ']' );
356
355
357
- ZVAL_STRING (retval , buffer );
356
+ ZVAL_STR (retval , smart_str_extract ( & host_str ) );
358
357
} else if (lexbor_uri -> host .type != LXB_URL_HOST_TYPE_EMPTY && lexbor_uri -> host .type != LXB_URL_HOST_TYPE__UNDEF ) {
359
358
360
359
switch (read_mode ) {
@@ -522,7 +521,7 @@ static zend_result lexbor_init_parser(void)
522
521
zend_hash_init (& lexbor_property_handlers , 8 , NULL , NULL , true);
523
522
524
523
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_SCHEME ), lexbor_read_scheme , lexbor_write_scheme );
525
- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_USER ), lexbor_read_user , lexbor_write_user );
524
+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_USERNAME ), lexbor_read_username , lexbor_write_username );
526
525
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_PASSWORD ), lexbor_read_password , lexbor_write_password );
527
526
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_HOST ), lexbor_read_host , lexbor_write_host );
528
527
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_PORT ), lexbor_read_port , lexbor_write_port );
@@ -552,6 +551,22 @@ static void *lexbor_parse_uri(const zend_string *url_str, const zend_string *bas
552
551
return url ;
553
552
}
554
553
554
+ static void lexbor_create_invalid_uri_exception (zval * exception_zv , zval * errors )
555
+ {
556
+ object_init_ex (exception_zv , whatwg_invalid_url_exception_ce );
557
+
558
+ zend_update_property_string (
559
+ whatwg_invalid_url_exception_ce ,
560
+ Z_OBJ_P (exception_zv ),
561
+ ZSTR_VAL (ZSTR_KNOWN (ZEND_STR_MESSAGE )),
562
+ ZSTR_LEN (ZSTR_KNOWN (ZEND_STR_MESSAGE )),
563
+ "URL parsing failed"
564
+ );
565
+
566
+ zend_update_property (whatwg_invalid_url_exception_ce , Z_OBJ_P (exception_zv ), "errors" , sizeof ("errors" ) - 1 , errors );
567
+ }
568
+
569
+
555
570
static void * lexbor_clone_uri (void * uri )
556
571
{
557
572
lxb_url_t * lexbor_uri = (lxb_url_t * ) uri ;
0 commit comments