@@ -1629,6 +1629,9 @@ static int php_cli_server_client_read_request_on_path(php_http_parser *parser, c
1629
1629
{
1630
1630
char * vpath ;
1631
1631
size_t vpath_len ;
1632
+ if (client -> request .vpath != NULL ) {
1633
+ return 1 ;
1634
+ }
1632
1635
normalize_vpath (& vpath , & vpath_len , at , length , 1 );
1633
1636
client -> request .vpath = vpath ;
1634
1637
client -> request .vpath_len = vpath_len ;
@@ -1639,17 +1642,32 @@ static int php_cli_server_client_read_request_on_path(php_http_parser *parser, c
1639
1642
static int php_cli_server_client_read_request_on_query_string (php_http_parser * parser , const char * at , size_t length )
1640
1643
{
1641
1644
php_cli_server_client * client = parser -> data ;
1642
- client -> request .query_string = pestrndup (at , length , 1 );
1643
- client -> request .query_string_len = length ;
1645
+ if (client -> request .query_string == NULL ) {
1646
+ client -> request .query_string = pestrndup (at , length , 1 );
1647
+ client -> request .query_string_len = length ;
1648
+ } else {
1649
+ client -> request .query_string = perealloc (client -> request .query_string , client -> request .query_string_len + length + 1 , 1 );
1650
+ memcpy (client -> request .query_string + client -> request .query_string_len , at , length );
1651
+ client -> request .query_string_len += length ;
1652
+ client -> request .query_string [client -> request .query_string_len ] = '\0' ;
1653
+ }
1644
1654
return 0 ;
1645
1655
}
1646
1656
1647
1657
static int php_cli_server_client_read_request_on_url (php_http_parser * parser , const char * at , size_t length )
1648
1658
{
1649
1659
php_cli_server_client * client = parser -> data ;
1650
- client -> request .request_method = parser -> method ;
1651
- client -> request .request_uri = pestrndup (at , length , 1 );
1652
- client -> request .request_uri_len = length ;
1660
+ if (client -> request .request_uri == NULL ) {
1661
+ client -> request .request_method = parser -> method ;
1662
+ client -> request .request_uri = pestrndup (at , length , 1 );
1663
+ client -> request .request_uri_len = length ;
1664
+ } else {
1665
+ ZEND_ASSERT (client -> request .request_method == parser -> method );
1666
+ client -> request .request_uri = perealloc (client -> request .request_uri , client -> request .request_uri_len + length + 1 , 1 );
1667
+ memcpy (client -> request .request_uri + client -> request .request_uri_len , at , length );
1668
+ client -> request .request_uri_len += length ;
1669
+ client -> request .request_uri [client -> request .request_uri_len ] = '\0' ;
1670
+ }
1653
1671
return 0 ;
1654
1672
}
1655
1673
0 commit comments