@@ -1667,7 +1667,6 @@ PHP_FUNCTION(socket_recvfrom)
1667
1667
1668
1668
zval obj ;
1669
1669
object_init_ex (& obj , socket_ethinfo_ce );
1670
- object_init (& zpayload );
1671
1670
1672
1671
switch (protocol ) {
1673
1672
case ETH_P_IP : {
@@ -1677,18 +1676,22 @@ PHP_FUNCTION(socket_recvfrom)
1677
1676
struct in_addr s , d ;
1678
1677
s .s_addr = ip -> saddr ;
1679
1678
d .s_addr = ip -> daddr ;
1680
- zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipsrc" ), inet_ntoa (s ));
1681
- zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipdst" ), inet_ntoa (d ));
1682
1679
1683
1680
switch (ip -> protocol ) {
1684
1681
case IPPROTO_TCP : {
1685
1682
struct tcphdr * tcp = (struct tcphdr * )ipdata ;
1683
+ object_init (& zpayload );
1684
+ zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipsrc" ), inet_ntoa (s ));
1685
+ zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipdst" ), inet_ntoa (d ));
1686
1686
zend_update_property_long (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("portsrc" ), ntohs (tcp -> th_sport ));
1687
1687
zend_update_property_long (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("portdst" ), ntohs (tcp -> th_dport ));
1688
1688
break ;
1689
1689
}
1690
1690
case IPPROTO_UDP : {
1691
1691
struct udphdr * udp = (struct udphdr * )ipdata ;
1692
+ object_init (& zpayload );
1693
+ zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipsrc" ), inet_ntoa (s ));
1694
+ zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipdst" ), inet_ntoa (d ));
1692
1695
zend_update_property_long (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("portsrc" ), ntohs (udp -> uh_sport ));
1693
1696
zend_update_property_long (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("portdst" ), ntohs (udp -> uh_dport ));
1694
1697
break ;
@@ -1697,7 +1700,6 @@ PHP_FUNCTION(socket_recvfrom)
1697
1700
ZVAL_NULL (& zpayload );
1698
1701
zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
1699
1702
zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("rawpayload" ), ZSTR_VAL (recv_buf ));
1700
- Z_DELREF (zpayload );
1701
1703
zend_string_efree (recv_buf );
1702
1704
zend_value_error ("unsupported ip header protocol" );
1703
1705
RETURN_THROWS ();
@@ -1710,12 +1712,14 @@ PHP_FUNCTION(socket_recvfrom)
1710
1712
char s [INET6_ADDRSTRLEN ], d [INET6_ADDRSTRLEN ];
1711
1713
inet_ntop (AF_INET6 , & ip -> saddr , s , sizeof (s ));
1712
1714
inet_ntop (AF_INET6 , & ip -> daddr , d , sizeof (d ));
1715
+ object_init (& zpayload );
1713
1716
zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipsrc" ), s );
1714
1717
zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipdst" ), d );
1715
1718
break ;
1716
1719
}
1717
1720
case ETH_P_LOOP : {
1718
1721
struct ethhdr * innere = (struct ethhdr * )((unsigned char * )e + ETH_HLEN );
1722
+ object_init (& zpayload );
1719
1723
zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("macsrc" ), ether_ntoa ((struct ether_addr * )innere -> h_source ));
1720
1724
zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("macdst" ), ether_ntoa ((struct ether_addr * )innere -> h_dest ));
1721
1725
break ;
@@ -1724,7 +1728,6 @@ PHP_FUNCTION(socket_recvfrom)
1724
1728
ZVAL_NULL (& zpayload );
1725
1729
zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
1726
1730
zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("rawpayload" ), ZSTR_VAL (recv_buf ));
1727
- Z_DELREF (zpayload );
1728
1731
zend_string_efree (recv_buf );
1729
1732
zend_value_error ("unsupported ethernet protocol" );
1730
1733
RETURN_THROWS ();
0 commit comments