Skip to content

Commit f8cb8fe

Browse files
committed
fix leaks
1 parent 5b45506 commit f8cb8fe

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

ext/sockets/sockets.c

+2
Original file line numberDiff line numberDiff line change
@@ -1746,6 +1746,7 @@ PHP_FUNCTION(socket_recvfrom)
17461746
zend_update_property(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("payload"), &zpayload);
17471747
zend_update_property_string(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("rawPacket"), ZSTR_VAL(recv_buf));
17481748
zend_string_efree(recv_buf);
1749+
Z_DELREF(zpayload);
17491750
ZEND_TRY_ASSIGN_REF_VALUE(arg2, &obj);
17501751
ZEND_TRY_ASSIGN_REF_STRING(arg5, ifrname);
17511752

@@ -1807,6 +1808,7 @@ PHP_FUNCTION(socket_recvfrom)
18071808
zend_update_property(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("payload"), &zpayload);
18081809
zend_update_property_string(Z_OBJCE(obj), Z_OBJ(obj), ZEND_STRL("rawPacket"), ZSTR_VAL(recv_buf));
18091810
zend_string_efree(recv_buf);
1811+
Z_DELREF(zpayload);
18101812
ZEND_TRY_ASSIGN_REF_VALUE(arg2, &obj);
18111813
ZEND_TRY_ASSIGN_REF_STRING(arg5, ifrname);
18121814

ext/sockets/tests/socket_afpacket.phpt

+30
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,34 @@ if (!function_exists("posix_getuid") || posix_getuid() != 0) {
135135

136136
var_dump($addr);
137137
var_dump($rsp);
138+
139+
$first_4_bytes = hex2bin("60000000");
140+
141+
$payload_len = hex2bin("0014");
142+
143+
$nexthdr = hex2bin("43"); // Extended proto
144+
145+
$hop_limit = hex2bin("40");
146+
147+
$src_ip = hex2bin("00000000000000000000000000000001");
148+
149+
$dst_ip = hex2bin("00000000000000000000000000000001");
150+
151+
$tcp_payload = str_repeat("A", 20);
152+
153+
$ethhdr = pack("H12H12n", "ffffffffffff", "000000000000", ETH_P_IPV6);
154+
155+
$buf = $ethhdr . $first_4_bytes . $payload_len . $nexthdr . $hop_limit . $src_ip . $dst_ip . $tcp_payload;
156+
157+
$buf .= str_repeat("\x00", max(0, 60 - strlen($buf)));
158+
159+
var_dump(socket_sendto($s_s, $buf, strlen($buf), 0, "lo", 1));
160+
161+
try {
162+
socket_recvfrom($s_c, $rsp, strlen($buf), 0, $addr);
163+
} catch (\ValueError $e) {
164+
echo $e->getMessage(), PHP_EOL;
165+
}
138166
?>
139167
--EXPECTF--
140168
bool(true)
@@ -247,3 +275,5 @@ object(Socket\EthernetPacket)#%d (7) {
247275
}
248276
}
249277
}
278+
int(%d)
279+
unsupported ip header protocol

0 commit comments

Comments
 (0)