@@ -1462,7 +1462,7 @@ static zend_result php_socket_get_chunk(zend_string *dst, const zend_string *src
14621462}
14631463
14641464static 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 ) {
14661466 struct tcphdr a ;
14671467 ETH_SUB_CHECKLENGTH (a , "TCP" );
14681468 struct tcphdr * tcp = & a ;
@@ -1471,23 +1471,22 @@ static zend_result php_socket_afpacket_add_tcp(unsigned char *ipdata, struct soc
14711471 zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("srcPort" ), ntohs (tcp -> th_sport ));
14721472 zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("dstPort" ), ntohs (tcp -> th_dport ));
14731473 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 );
14751475 zend_update_property (Z_OBJCE_P (zpayload ), Z_OBJ_P (zpayload ), ZEND_STRL ("payload" ), szpayload );
14761476 Z_DELREF_P (szpayload );
14771477 return SUCCESS ;
14781478}
14791479
14801480static 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 ) {
14821482 struct udphdr a ;
14831483 ETH_SUB_CHECKLENGTH (a , "UDP" );
14841484 struct udphdr * udp = & a ;
14851485 memcpy (udp , ipdata , sizeof (* udp ));
1486- size_t headersize = sizeof (* udp );
14871486 object_init_ex (szpayload , udppacket_ce );
14881487 zend_update_property_long (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("srcPort" ), ntohs (udp -> uh_sport ));
14891488 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 ) );
14911490 zend_update_property_stringl (Z_OBJCE_P (szpayload ), Z_OBJ_P (szpayload ), ZEND_STRL ("rawPacket" ), (char * )ipdata , headersize );
14921491 zend_update_property (Z_OBJCE_P (zpayload ), Z_OBJ_P (zpayload ), ZEND_STRL ("payload" ), szpayload );
14931492 Z_DELREF_P (szpayload );
@@ -1775,7 +1774,7 @@ PHP_FUNCTION(socket_recvfrom)
17751774 size_t tlayer = ip -> ihl * 4 ;
17761775 size_t totalip = ntohs (ip -> tot_len );
17771776
1778- if (tlayer < sizeof ( * ip ) || totalip < tlayer || totalip < slen ) {
1777+ if (php_socket_get_chunk ( dst_buf , recv_buf , tlayer , totalip ) ) {
17791778 ZVAL_NULL (& zpayload );
17801779 zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
17811780 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)
18091808 RETURN_THROWS ();
18101809 }
18111810 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 ) {
18131812 zend_string_release (dst_buf );
18141813 zend_string_efree (recv_buf );
18151814 RETURN_THROWS ();
@@ -1824,7 +1823,7 @@ PHP_FUNCTION(socket_recvfrom)
18241823 RETURN_THROWS ();
18251824 }
18261825 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 ) {
18281827 zend_string_release (dst_buf );
18291828 zend_string_efree (recv_buf );
18301829 RETURN_THROWS ();
@@ -1895,7 +1894,7 @@ PHP_FUNCTION(socket_recvfrom)
18951894 RETURN_THROWS ();
18961895 }
18971896 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 ) {
18991898 zend_string_release (dst_buf );
19001899 zend_string_efree (recv_buf );
19011900 RETURN_THROWS ();
@@ -1910,7 +1909,7 @@ PHP_FUNCTION(socket_recvfrom)
19101909 RETURN_THROWS ();
19111910 }
19121911 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 ) {
19141913 zend_string_release (dst_buf );
19151914 zend_string_efree (recv_buf );
19161915 RETURN_THROWS ();
0 commit comments