@@ -1667,7 +1667,6 @@ PHP_FUNCTION(socket_recvfrom)
16671667
16681668 zval obj ;
16691669 object_init_ex (& obj , socket_ethinfo_ce );
1670- object_init (& zpayload );
16711670
16721671 switch (protocol ) {
16731672 case ETH_P_IP : {
@@ -1677,18 +1676,22 @@ PHP_FUNCTION(socket_recvfrom)
16771676 struct in_addr s , d ;
16781677 s .s_addr = ip -> saddr ;
16791678 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 ));
16821679
16831680 switch (ip -> protocol ) {
16841681 case IPPROTO_TCP : {
16851682 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 ));
16861686 zend_update_property_long (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("portsrc" ), ntohs (tcp -> th_sport ));
16871687 zend_update_property_long (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("portdst" ), ntohs (tcp -> th_dport ));
16881688 break ;
16891689 }
16901690 case IPPROTO_UDP : {
16911691 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 ));
16921695 zend_update_property_long (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("portsrc" ), ntohs (udp -> uh_sport ));
16931696 zend_update_property_long (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("portdst" ), ntohs (udp -> uh_dport ));
16941697 break ;
@@ -1697,7 +1700,6 @@ PHP_FUNCTION(socket_recvfrom)
16971700 ZVAL_NULL (& zpayload );
16981701 zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
16991702 zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("rawpayload" ), ZSTR_VAL (recv_buf ));
1700- Z_DELREF (zpayload );
17011703 zend_string_efree (recv_buf );
17021704 zend_value_error ("unsupported ip header protocol" );
17031705 RETURN_THROWS ();
@@ -1710,12 +1712,14 @@ PHP_FUNCTION(socket_recvfrom)
17101712 char s [INET6_ADDRSTRLEN ], d [INET6_ADDRSTRLEN ];
17111713 inet_ntop (AF_INET6 , & ip -> saddr , s , sizeof (s ));
17121714 inet_ntop (AF_INET6 , & ip -> daddr , d , sizeof (d ));
1715+ object_init (& zpayload );
17131716 zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipsrc" ), s );
17141717 zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("ipdst" ), d );
17151718 break ;
17161719 }
17171720 case ETH_P_LOOP : {
17181721 struct ethhdr * innere = (struct ethhdr * )((unsigned char * )e + ETH_HLEN );
1722+ object_init (& zpayload );
17191723 zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("macsrc" ), ether_ntoa ((struct ether_addr * )innere -> h_source ));
17201724 zend_update_property_string (Z_OBJCE (zpayload ), Z_OBJ (zpayload ), ZEND_STRL ("macdst" ), ether_ntoa ((struct ether_addr * )innere -> h_dest ));
17211725 break ;
@@ -1724,7 +1728,6 @@ PHP_FUNCTION(socket_recvfrom)
17241728 ZVAL_NULL (& zpayload );
17251729 zend_update_property (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("payload" ), & zpayload );
17261730 zend_update_property_string (Z_OBJCE (obj ), Z_OBJ (obj ), ZEND_STRL ("rawpayload" ), ZSTR_VAL (recv_buf ));
1727- Z_DELREF (zpayload );
17281731 zend_string_efree (recv_buf );
17291732 zend_value_error ("unsupported ethernet protocol" );
17301733 RETURN_THROWS ();
0 commit comments