2525#include "file.h"
2626#include "zend_simd.h"
2727#include "Zend/zend_smart_str.h"
28- #include "Zend/zend_exceptions.h"
29- #include "ext/uri/php_uri.h"
3028
3129/* {{{ free_url */
3230PHPAPI void php_url_free (php_url * theurl )
@@ -49,13 +47,6 @@ PHPAPI void php_url_free(php_url *theurl)
4947}
5048/* }}} */
5149
52- static void parse_url_free_uri (void * uri )
53- {
54- php_url * parse_url_uri = (php_url * ) uri ;
55-
56- php_url_free (parse_url_uri );
57- }
58-
5950static void php_replace_controlchars (char * str , size_t len )
6051{
6152 unsigned char * s = (unsigned char * )str ;
@@ -320,166 +311,7 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port
320311
321312 return ret ;
322313}
323-
324- static void parse_url_decode_component (zval * zv , uri_component_read_mode_t read_mode )
325- {
326- if (Z_TYPE_P (zv ) != IS_STRING ) {
327- return ;
328- }
329-
330- if (read_mode == URI_COMPONENT_READ_RAW ) {
331- return ;
332- }
333-
334- php_raw_url_decode (Z_STRVAL_P (zv ), Z_STRLEN_P (zv ));
335- }
336-
337- static zend_result parse_url_read_scheme (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
338- {
339- php_url * parse_url_uri = internal_uri -> uri ;
340-
341- if (parse_url_uri -> scheme ) {
342- ZVAL_STR_COPY (retval , parse_url_uri -> scheme );
343- parse_url_decode_component (retval , read_mode );
344- } else {
345- ZVAL_NULL (retval );
346- }
347-
348- return SUCCESS ;
349- }
350-
351- static zend_result parse_url_read_username (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
352- {
353- php_url * parse_url_uri = internal_uri -> uri ;
354-
355- if (parse_url_uri -> user ) {
356- ZVAL_STR_COPY (retval , parse_url_uri -> user );
357- parse_url_decode_component (retval , read_mode );
358- } else {
359- ZVAL_NULL (retval );
360- }
361-
362- return SUCCESS ;
363- }
364-
365- static zend_result parse_url_read_password (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
366- {
367- php_url * parse_url_uri = internal_uri -> uri ;
368-
369- if (parse_url_uri -> pass ) {
370- ZVAL_STR_COPY (retval , parse_url_uri -> pass );
371- parse_url_decode_component (retval , read_mode );
372- } else {
373- ZVAL_NULL (retval );
374- }
375-
376- return SUCCESS ;
377- }
378-
379- static zend_result parse_url_read_host (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
380- {
381- php_url * parse_url_uri = internal_uri -> uri ;
382-
383- if (parse_url_uri -> host ) {
384- ZVAL_STR_COPY (retval , parse_url_uri -> host );
385- parse_url_decode_component (retval , read_mode );
386- } else {
387- ZVAL_NULL (retval );
388- }
389-
390- return SUCCESS ;
391- }
392-
393- static zend_result parse_url_read_port (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
394- {
395- php_url * parse_url_uri = internal_uri -> uri ;
396-
397- if (parse_url_uri -> port ) {
398- ZVAL_LONG (retval , parse_url_uri -> port );
399- parse_url_decode_component (retval , read_mode );
400- } else {
401- ZVAL_NULL (retval );
402- }
403-
404- return SUCCESS ;
405- }
406-
407- static zend_result parse_url_read_path (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
408- {
409- php_url * parse_url_uri = internal_uri -> uri ;
410-
411- if (parse_url_uri -> path ) {
412- ZVAL_STR_COPY (retval , parse_url_uri -> path );
413- parse_url_decode_component (retval , read_mode );
414- } else {
415- ZVAL_NULL (retval );
416- }
417-
418- return SUCCESS ;
419- }
420-
421- static zend_result parse_url_read_query (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
422- {
423- php_url * parse_url_uri = internal_uri -> uri ;
424-
425- if (parse_url_uri -> query ) {
426- ZVAL_STR_COPY (retval , parse_url_uri -> query );
427- parse_url_decode_component (retval , read_mode );
428- } else {
429- ZVAL_NULL (retval );
430- }
431-
432- return SUCCESS ;
433- }
434-
435- static zend_result parse_url_read_fragment (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * retval )
436- {
437- php_url * parse_url_uri = internal_uri -> uri ;
438-
439- if (parse_url_uri -> fragment ) {
440- ZVAL_STR_COPY (retval , parse_url_uri -> fragment );
441- parse_url_decode_component (retval , read_mode );
442- } else {
443- ZVAL_NULL (retval );
444- }
445-
446- return SUCCESS ;
447- }
448-
449- static void throw_invalid_uri_exception (void )
450- {
451- zend_throw_exception (uri_invalid_uri_exception_ce , "The specified URI is malformed" , 0 );
452- }
453-
454- static void * parse_url_parse_uri (const char * uri_str , size_t uri_str_len , const void * base_url , zval * errors , bool silent )
455- {
456- bool has_port ;
457-
458- php_url * url = php_url_parse_ex2 (uri_str , uri_str_len , & has_port );
459- if (url == NULL && !silent ) {
460- throw_invalid_uri_exception ();
461- }
462-
463- return url ;
464- }
465-
466- const uri_parser_t parse_url_uri_parser = {
467- .name = URI_PARSER_PHP ,
468- .parse_uri = parse_url_parse_uri ,
469- .clone_uri = NULL ,
470- .uri_to_string = NULL ,
471- .free_uri = parse_url_free_uri ,
472- {
473- .scheme = {.read_func = parse_url_read_scheme , .write_func = NULL },
474- .username = {.read_func = parse_url_read_username , .write_func = NULL },
475- .password = {.read_func = parse_url_read_password , .write_func = NULL },
476- .host = {.read_func = parse_url_read_host , .write_func = NULL },
477- .port = {.read_func = parse_url_read_port , .write_func = NULL },
478- .path = {.read_func = parse_url_read_path , .write_func = NULL },
479- .query = {.read_func = parse_url_read_query , .write_func = NULL },
480- .fragment = {.read_func = parse_url_read_fragment , .write_func = NULL },
481- }
482- };
314+ /* }}} */
483315
484316/* {{{ Parse a URL and return its components */
485317PHP_FUNCTION (parse_url )
@@ -921,8 +753,3 @@ PHP_FUNCTION(get_headers)
921753 php_stream_close (stream );
922754}
923755/* }}} */
924-
925- PHP_MINIT_FUNCTION (url )
926- {
927- return php_uri_parser_register (& parse_url_uri_parser );
928- }
0 commit comments