Skip to content

Commit e1b8154

Browse files
committed
addressing remarks
1 parent 6895a55 commit e1b8154

File tree

4 files changed

+41
-67
lines changed

4 files changed

+41
-67
lines changed

ext/sockets/sockets.c

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,7 @@ PHP_FUNCTION(socket_recvfrom)
16781678
zval obj;
16791679
object_init_ex(&obj, ethpacket_ce);
16801680
zend_update_property(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("socket"), arg1);
1681-
zend_update_property_long(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("headerSize"), sizeof(*e));
1681+
zend_update_property_long(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("headerSize"), ETH_HLEN);
16821682
zend_update_property_long(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("ethProtocol"), protocol);
16831683

16841684
switch (protocol) {
@@ -1688,7 +1688,7 @@ PHP_FUNCTION(socket_recvfrom)
16881688
size_t tlayer = ip->ihl * 4;
16891689
size_t totalip = ntohs(ip->tot_len);
16901690

1691-
if (tlayer < sizeof(*ip) || totalip < tlayer) {
1691+
if (tlayer < sizeof(*ip) || totalip < tlayer || totalip < slen) {
16921692
ZVAL_NULL(&zpayload);
16931693
zend_update_property(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("payload"), &zpayload);
16941694
zend_update_property_string(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("rawPacket"), ZSTR_VAL(recv_buf));
@@ -1702,15 +1702,15 @@ PHP_FUNCTION(socket_recvfrom)
17021702
zend_value_error("invalid transport header length");
17031703
RETURN_THROWS();
17041704
}
1705-
unsigned char *ipdata = payload + (ip->ihl * 4);
1705+
unsigned char *ipdata = payload + tlayer;
17061706
struct in_addr s, d;
17071707
s.s_addr = ip->saddr;
17081708
d.s_addr = ip->daddr;
17091709
zval szpayload;
17101710
object_init_ex(&zpayload, ipv4packet_ce);
1711-
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("ipSrc"), inet_ntoa(s));
1712-
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("ipDst"), inet_ntoa(d));
1713-
zend_update_property_long(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("headerSize"), sizeof(*ip));
1711+
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("srcAddr"), inet_ntoa(s));
1712+
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("dstAddr"), inet_ntoa(d));
1713+
zend_update_property_long(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("headerSize"), totalip);
17141714
zend_update_property(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("socket"), arg1);
17151715

17161716
switch (ip->protocol) {
@@ -1726,10 +1726,8 @@ PHP_FUNCTION(socket_recvfrom)
17261726
case IPPROTO_UDP: {
17271727
struct udphdr *udp = (struct udphdr *)ipdata;
17281728
object_init_ex(&szpayload, udppacket_ce);
1729-
zend_update_property_string(Z_OBJCE(szpayload), Z_OBJ(szpayload), ZEND_STRL("ipSrc"), inet_ntoa(s));
1730-
zend_update_property_string(Z_OBJCE(szpayload), Z_OBJ(szpayload), ZEND_STRL("ipDst"), inet_ntoa(d));
1731-
zend_update_property_long(Z_OBJCE(szpayload), Z_OBJ(szpayload), ZEND_STRL("srcport"), ntohs(udp->uh_sport));
1732-
zend_update_property_long(Z_OBJCE(szpayload), Z_OBJ(szpayload), ZEND_STRL("dstport"), ntohs(udp->uh_dport));
1729+
zend_update_property_long(Z_OBJCE(szpayload), Z_OBJ(szpayload), ZEND_STRL("srcPort"), ntohs(udp->uh_sport));
1730+
zend_update_property_long(Z_OBJCE(szpayload), Z_OBJ(szpayload), ZEND_STRL("dstPort"), ntohs(udp->uh_dport));
17331731
zend_update_property_long(Z_OBJCE(szpayload), Z_OBJ(szpayload), ZEND_STRL("headerSize"), sizeof(*udp));
17341732
zend_update_property(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("payload"), &szpayload);
17351733
break;
@@ -1752,13 +1750,15 @@ PHP_FUNCTION(socket_recvfrom)
17521750
case ETH_P_IPV6: {
17531751
payload = ((unsigned char *)e + ETH_HLEN);
17541752
struct ipv6hdr *ip = (struct ipv6hdr *)payload;
1753+
size_t totalip = sizeof(*ip) + ip->payload_len;
17551754
char s[INET6_ADDRSTRLEN], d[INET6_ADDRSTRLEN];
17561755
inet_ntop(AF_INET6, &ip->saddr, s, sizeof(s));
17571756
inet_ntop(AF_INET6, &ip->daddr, d, sizeof(d));
17581757
object_init_ex(&zpayload, ipv6packet_ce);
1759-
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("ipSrc"), s);
1760-
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("ipDst"), d);
1761-
zend_update_property_long(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("headerSize"), sizeof(*ip));
1758+
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("srcAddr"), s);
1759+
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("dstAddr"), d);
1760+
zend_update_property_long(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("headerSize"), totalip);
1761+
zend_update_property(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("socket"), arg1);
17621762
// TODO completing
17631763
break;
17641764
}
@@ -1767,9 +1767,9 @@ PHP_FUNCTION(socket_recvfrom)
17671767
zval innerp;
17681768
ZVAL_NULL(&innerp);
17691769
object_init_ex(&zpayload, ethpacket_ce);
1770-
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("macSrc"), ether_ntoa((struct ether_addr *)innere->h_source));
1771-
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("macDst"), ether_ntoa((struct ether_addr *)innere->h_dest));
1772-
zend_update_property_long(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("headerSize"), sizeof(*innere));
1770+
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("srcMac"), ether_ntoa((struct ether_addr *)innere->h_source));
1771+
zend_update_property_string(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("dstMac"), ether_ntoa((struct ether_addr *)innere->h_dest));
1772+
zend_update_property_long(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("headerSize"), ETH_HLEN);
17731773
zend_update_property(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("socket"), arg1);
17741774
zend_update_property(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("rawPacket"), &innerp);
17751775
zend_update_property(Z_OBJCE(zpayload), Z_OBJ(zpayload), ZEND_STRL("payload"), &innerp);
@@ -1791,8 +1791,8 @@ PHP_FUNCTION(socket_recvfrom)
17911791
RETURN_THROWS();
17921792
}
17931793

1794-
zend_update_property_string(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("macSrc"), ether_ntoa((struct ether_addr *)e->h_source));
1795-
zend_update_property_string(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("macDst"), ether_ntoa((struct ether_addr *)e->h_dest));
1794+
zend_update_property_string(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("srcMac"), ether_ntoa((struct ether_addr *)e->h_source));
1795+
zend_update_property_string(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("dstMac"), ether_ntoa((struct ether_addr *)e->h_dest));
17961796
zend_update_property(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("payload"), &zpayload);
17971797
zend_update_property_string(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("rawPacket"), ZSTR_VAL(recv_buf));
17981798
Z_DELREF(zpayload);

ext/sockets/sockets.stub.php

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2183,32 +2183,28 @@ function socket_wsaprotocol_info_release(string $info_id): bool {}
21832183
{
21842184
public \Socket $socket;
21852185
public int $ethProtocol;
2186-
public string $macSrc;
2187-
public string $macDst;
2188-
public ?object $payload;
2186+
public string $srcMac;
2187+
public string $dstMac;
2188+
public ?Packet $payload;
21892189
}
21902190

21912191
final readonly class TcpPacket extends Packet
21922192
{
2193-
public string $srcAddr;
2194-
public string $dstAddr;
21952193
public string $srcPort;
21962194
public int $dstPort;
21972195
}
21982196

21992197
final readonly class UdpPacket extends Packet
22002198
{
2201-
public string $srcAddr;
2202-
public string $dstAddr;
2203-
public string $srcPort;
2199+
public int $srcPort;
22042200
public int $dstPort;
22052201
}
22062202

22072203
final readonly class Ipv4Packet extends Packet
22082204
{
22092205
public string $srcAddr;
22102206
public string $dstAddr;
2211-
public ?object $payload;
2207+
public ?Packet $payload;
22122208
}
22132209

22142210
final readonly class Ipv6Packet extends Packet

ext/sockets/sockets_arginfo.h

Lines changed: 16 additions & 38 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/sockets/tests/socket_afpacket.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ object(Socket\EthernetPacket)#3 (%d) {
7676
}
7777
["ethProtocol"]=>
7878
int(%i)
79-
["macSrc"]=>
79+
["srcMac"]=>
8080
string(%d) "%s:%s:%s:%s:%s:%s"
81-
["macDst"]=>
81+
["dstMac"]=>
8282
string(%d) "%s:%s:%s:%s:%s:%s"
8383
["payload"]=>
8484
object(%s)#4 (%d) {

0 commit comments

Comments
 (0)