@@ -1462,7 +1462,7 @@ static zend_result php_socket_get_chunk(zend_string *dst, const zend_string *src
1462
1462
}
1463
1463
1464
1464
static zend_result php_socket_afpacket_add_tcp (unsigned char * ipdata , struct sockaddr_ll sll , char * ifrname , zend_string * recv_buf ,
1465
- size_t slen , zval * szpayload , zval * zpayload , zval * obj , zval * arg2 , zval * arg5 , zval * arg6 ) {
1465
+ size_t slen , zval * szpayload , zval * zpayload , zval * obj , zval * arg2 , zval * arg5 , zval * arg6 , size_t headersize ) {
1466
1466
struct tcphdr a ;
1467
1467
ETH_SUB_CHECKLENGTH (a , "TCP" );
1468
1468
struct tcphdr * tcp = & a ;
@@ -1471,23 +1471,22 @@ static zend_result php_socket_afpacket_add_tcp(unsigned char *ipdata, struct soc
1471
1471
zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("srcPort" ), ntohs (tcp -> th_sport ));
1472
1472
zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("dstPort" ), ntohs (tcp -> th_dport ));
1473
1473
zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("headerSize" ), sizeof (* tcp ));
1474
- zend_update_property_stringl (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("rawPacket" ), (char * )ipdata , sizeof ( * tcp ) );
1474
+ zend_update_property_stringl (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("rawPacket" ), (char * )ipdata , headersize );
1475
1475
zend_update_property (Z_OBJCE_P (zpayload ), Z_OBJ_P (zpayload ), ZEND_STRL ("payload" ), szpayload );
1476
1476
Z_DELREF_P (szpayload );
1477
1477
return SUCCESS ;
1478
1478
}
1479
1479
1480
1480
static zend_result php_socket_afpacket_add_udp (unsigned char * ipdata , struct sockaddr_ll sll , char * ifrname , zend_string * recv_buf ,
1481
- size_t slen , zval * szpayload , zval * zpayload , zval * obj , zval * arg2 , zval * arg5 , zval * arg6 ) {
1481
+ size_t slen , zval * szpayload , zval * zpayload , zval * obj , zval * arg2 , zval * arg5 , zval * arg6 , size_t headersize ) {
1482
1482
struct udphdr a ;
1483
1483
ETH_SUB_CHECKLENGTH (a , "UDP" );
1484
1484
struct udphdr * udp = & a ;
1485
1485
memcpy (udp , ipdata , sizeof (* udp ));
1486
- size_t headersize = sizeof (* udp );
1487
1486
object_init_ex (szpayload , udppacket_ce );
1488
1487
zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("srcPort" ), ntohs (udp -> uh_sport ));
1489
1488
zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("dstPort" ), ntohs (udp -> uh_dport ));
1490
- zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("headerSize" ), headersize );
1489
+ zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("headerSize" ), sizeof ( * udp ) );
1491
1490
zend_update_property_stringl (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("rawPacket" ), (char * )ipdata , headersize );
1492
1491
zend_update_property (Z_OBJCE_P (zpayload ), Z_OBJ_P (zpayload ), ZEND_STRL ("payload" ), szpayload );
1493
1492
Z_DELREF_P (szpayload );
@@ -1775,7 +1774,7 @@ PHP_FUNCTION(socket_recvfrom)
1775
1774
size_t tlayer = ip -> ihl * 4 ;
1776
1775
size_t totalip = ntohs (ip -> tot_len );
1777
1776
1778
- if (tlayer < sizeof ( * ip ) || totalip < tlayer || totalip < slen ) {
1777
+ if (php_socket_get_chunk ( dst_buf , recv_buf , tlayer , totalip ) ) {
1779
1778
ZVAL_NULL (& zpayload );
1780
1779
zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
1781
1780
zend_update_property_stringl (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("rawPacket" ), ZSTR_VAL (recv_buf ), ZSTR_LEN (recv_buf ));
@@ -1809,7 +1808,7 @@ PHP_FUNCTION(socket_recvfrom)
1809
1808
RETURN_THROWS ();
1810
1809
}
1811
1810
unsigned char * ipdata = (unsigned char * )ZSTR_VAL (dst_buf );
1812
- if (php_socket_afpacket_add_tcp (ipdata , sll , ifrname , recv_buf , slen , & szpayload , & zpayload , & obj , arg2 , arg5 , arg6 ) == FAILURE ) {
1811
+ if (php_socket_afpacket_add_tcp (ipdata , sll , ifrname , recv_buf , slen , & szpayload , & zpayload , & obj , arg2 , arg5 , arg6 , ZSTR_LEN ( dst_buf ) ) == FAILURE ) {
1813
1812
zend_string_release (dst_buf );
1814
1813
zend_string_efree (recv_buf );
1815
1814
RETURN_THROWS ();
@@ -1824,7 +1823,7 @@ PHP_FUNCTION(socket_recvfrom)
1824
1823
RETURN_THROWS ();
1825
1824
}
1826
1825
unsigned char * ipdata = (unsigned char * )ZSTR_VAL (dst_buf );
1827
- if (php_socket_afpacket_add_udp (ipdata , sll , ifrname , recv_buf , slen , & szpayload , & zpayload , & obj , arg2 , arg5 , arg6 ) == FAILURE ) {
1826
+ if (php_socket_afpacket_add_udp (ipdata , sll , ifrname , recv_buf , slen , & szpayload , & zpayload , & obj , arg2 , arg5 , arg6 , ZSTR_LEN ( dst_buf ) ) == FAILURE ) {
1828
1827
zend_string_release (dst_buf );
1829
1828
zend_string_efree (recv_buf );
1830
1829
RETURN_THROWS ();
@@ -1895,7 +1894,7 @@ PHP_FUNCTION(socket_recvfrom)
1895
1894
RETURN_THROWS ();
1896
1895
}
1897
1896
unsigned char * ipdata = (unsigned char * )ZSTR_VAL (dst_buf );
1898
- if (php_socket_afpacket_add_tcp (ipdata , sll , ifrname , recv_buf , slen , & szpayload , & zpayload , & obj , arg2 , arg5 , arg6 ) == FAILURE ) {
1897
+ if (php_socket_afpacket_add_tcp (ipdata , sll , ifrname , recv_buf , slen , & szpayload , & zpayload , & obj , arg2 , arg5 , arg6 , ZSTR_LEN ( dst_buf ) ) == FAILURE ) {
1899
1898
zend_string_release (dst_buf );
1900
1899
zend_string_efree (recv_buf );
1901
1900
RETURN_THROWS ();
@@ -1910,7 +1909,7 @@ PHP_FUNCTION(socket_recvfrom)
1910
1909
RETURN_THROWS ();
1911
1910
}
1912
1911
unsigned char * ipdata = (unsigned char * )ZSTR_VAL (dst_buf );
1913
- if (php_socket_afpacket_add_udp (ipdata , sll , ifrname , recv_buf , slen , & szpayload , & zpayload , & obj , arg2 , arg5 , arg6 ) == FAILURE ) {
1912
+ if (php_socket_afpacket_add_udp (ipdata , sll , ifrname , recv_buf , slen , & szpayload , & zpayload , & obj , arg2 , arg5 , arg6 , ZSTR_LEN ( dst_buf ) ) == FAILURE ) {
1914
1913
zend_string_release (dst_buf );
1915
1914
zend_string_efree (recv_buf );
1916
1915
RETURN_THROWS ();
0 commit comments