@@ -164,8 +164,7 @@ typedef struct php_cli_server_client {
164
164
php_socket_t sock ;
165
165
struct sockaddr * addr ;
166
166
socklen_t addr_len ;
167
- char * addr_str ;
168
- size_t addr_str_len ;
167
+ zend_string * addr_str ;
169
168
php_http_parser parser ;
170
169
unsigned int request_read :1 ;
171
170
char * current_header_name ;
@@ -640,9 +639,9 @@ static void sapi_cli_server_register_variables(zval *track_vars_array) /* {{{ */
640
639
sapi_cli_server_register_variable (track_vars_array , "DOCUMENT_ROOT" , client -> server -> document_root );
641
640
{
642
641
char * tmp ;
643
- if ((tmp = strrchr (client -> addr_str , ':' ))) {
642
+ if ((tmp = strrchr (ZSTR_VAL ( client -> addr_str ) , ':' ))) {
644
643
char addr [64 ], port [8 ];
645
- const char * addr_start = client -> addr_str , * addr_end = tmp ;
644
+ const char * addr_start = ZSTR_VAL ( client -> addr_str ) , * addr_end = tmp ;
646
645
if (addr_start [0 ] == '[' ) addr_start ++ ;
647
646
if (addr_end [-1 ] == ']' ) addr_end -- ;
648
647
@@ -653,7 +652,7 @@ static void sapi_cli_server_register_variables(zval *track_vars_array) /* {{{ */
653
652
sapi_cli_server_register_variable (track_vars_array , "REMOTE_ADDR" , addr );
654
653
sapi_cli_server_register_variable (track_vars_array , "REMOTE_PORT" , port );
655
654
} else {
656
- sapi_cli_server_register_variable (track_vars_array , "REMOTE_ADDR" , client -> addr_str );
655
+ sapi_cli_server_register_variable (track_vars_array , "REMOTE_ADDR" , ZSTR_VAL ( client -> addr_str ) );
657
656
}
658
657
}
659
658
{
@@ -1152,7 +1151,8 @@ static void php_cli_server_log_response(php_cli_server_client *client, int statu
1152
1151
#endif
1153
1152
1154
1153
/* basic */
1155
- spprintf (& basic_buf , 0 , "%s [%d]: %s %s" , client -> addr_str , status , php_http_method_str (client -> request .request_method ), client -> request .request_uri );
1154
+ spprintf (& basic_buf , 0 , "%s [%d]: %s %s" , ZSTR_VAL (client -> addr_str ), status ,
1155
+ php_http_method_str (client -> request .request_method ), client -> request .request_uri );
1156
1156
if (!basic_buf ) {
1157
1157
return ;
1158
1158
}
@@ -1891,14 +1891,13 @@ static void php_cli_server_client_ctor(php_cli_server_client *client, php_cli_se
1891
1891
client -> sock = client_sock ;
1892
1892
client -> addr = addr ;
1893
1893
client -> addr_len = addr_len ;
1894
- {
1895
- zend_string * addr_str = 0 ;
1896
1894
1897
- php_network_populate_name_from_sockaddr (addr , addr_len , & addr_str , NULL , 0 );
1898
- client -> addr_str = pestrndup (ZSTR_VAL (addr_str ), ZSTR_LEN (addr_str ), 1 );
1899
- client -> addr_str_len = ZSTR_LEN (addr_str );
1900
- zend_string_release_ex (addr_str , 0 );
1901
- }
1895
+ // TODO Prevent realloc?
1896
+ zend_string * tmp_addr = NULL ;
1897
+ php_network_populate_name_from_sockaddr (addr , addr_len , & tmp_addr , NULL , 0 );
1898
+ client -> addr_str = zend_string_dup (tmp_addr , /* persistent */ true);
1899
+ zend_string_release_ex (tmp_addr , /* persistent */ false);
1900
+
1902
1901
php_http_parser_init (& client -> parser , PHP_HTTP_REQUEST );
1903
1902
client -> request_read = 0 ;
1904
1903
@@ -1925,15 +1924,15 @@ static void php_cli_server_client_dtor(php_cli_server_client *client) /* {{{ */
1925
1924
client -> file_fd = -1 ;
1926
1925
}
1927
1926
pefree (client -> addr , 1 );
1928
- pefree (client -> addr_str , 1 );
1927
+ zend_string_release_ex (client -> addr_str , /* persistent */ true );
1929
1928
if (client -> content_sender_initialized ) {
1930
1929
php_cli_server_content_sender_dtor (& client -> content_sender );
1931
1930
}
1932
1931
} /* }}} */
1933
1932
1934
1933
static void php_cli_server_close_connection (php_cli_server * server , php_cli_server_client * client ) /* {{{ */
1935
1934
{
1936
- php_cli_server_logf (PHP_CLI_SERVER_LOG_MESSAGE , "%s Closing" , client -> addr_str );
1935
+ php_cli_server_logf (PHP_CLI_SERVER_LOG_MESSAGE , "%s Closing" , ZSTR_VAL ( client -> addr_str ) );
1937
1936
1938
1937
zend_hash_index_del (& server -> clients , client -> sock );
1939
1938
} /* }}} */
@@ -2515,9 +2514,9 @@ static zend_result php_cli_server_recv_event_read_request(php_cli_server *server
2515
2514
if (errstr ) {
2516
2515
if (strcmp (errstr , php_cli_server_request_error_unexpected_eof ) == 0 && client -> parser .state == s_start_req ) {
2517
2516
php_cli_server_logf (PHP_CLI_SERVER_LOG_MESSAGE ,
2518
- "%s Closed without sending a request; it was probably just an unused speculative preconnection" , client -> addr_str );
2517
+ "%s Closed without sending a request; it was probably just an unused speculative preconnection" , ZSTR_VAL ( client -> addr_str ) );
2519
2518
} else {
2520
- php_cli_server_logf (PHP_CLI_SERVER_LOG_ERROR , "%s Invalid request (%s)" , client -> addr_str , errstr );
2519
+ php_cli_server_logf (PHP_CLI_SERVER_LOG_ERROR , "%s Invalid request (%s)" , ZSTR_VAL ( client -> addr_str ) , errstr );
2521
2520
}
2522
2521
efree (errstr );
2523
2522
}
@@ -2605,7 +2604,7 @@ static zend_result php_cli_server_do_event_for_each_fd_callback(void *_params, p
2605
2604
2606
2605
php_cli_server_client_ctor (client , server , client_sock , sa , socklen );
2607
2606
2608
- php_cli_server_logf (PHP_CLI_SERVER_LOG_MESSAGE , "%s Accepted" , client -> addr_str );
2607
+ php_cli_server_logf (PHP_CLI_SERVER_LOG_MESSAGE , "%s Accepted" , ZSTR_VAL ( client -> addr_str ) );
2609
2608
2610
2609
zend_hash_index_update_ptr (& server -> clients , client_sock , client );
2611
2610
0 commit comments