Skip to content

Commit ec2e7a2

Browse files
thiagooakkrakjoe
authored andcommitted
Validate length on socket_write
1 parent f6079e3 commit ec2e7a2

File tree

5 files changed

+55
-0
lines changed

5 files changed

+55
-0
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ PHP NEWS
1313
. Fixed bug #76348 (WSDL_CACHE_MEMORY causes Segmentation fault). (cmb)
1414
. Fixed bug #77141 (Signedness issue in SOAP when precision=-1). (cmb)
1515

16+
- Sockets:
17+
. Fixed bug #67619 (Validate length on socket_write). (thiagooak)
18+
1619
08 Nov 2018, PHP 7.1.24
1720

1821
- Core:

ext/sockets/sockets.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,6 +1113,11 @@ PHP_FUNCTION(socket_write)
11131113
return;
11141114
}
11151115

1116+
if (length < 0) {
1117+
php_error_docref(NULL, E_WARNING, "Length cannot be negative");
1118+
RETURN_FALSE;
1119+
}
1120+
11161121
if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
11171122
RETURN_FALSE;
11181123
}
@@ -1655,6 +1660,11 @@ PHP_FUNCTION(socket_send)
16551660
return;
16561661
}
16571662

1663+
if (len < 0) {
1664+
php_error_docref(NULL, E_WARNING, "Length cannot be negative");
1665+
RETURN_FALSE;
1666+
}
1667+
16581668
if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
16591669
RETURN_FALSE;
16601670
}
@@ -1817,6 +1827,11 @@ PHP_FUNCTION(socket_sendto)
18171827
return;
18181828
}
18191829

1830+
if (len < 0) {
1831+
php_error_docref(NULL, E_WARNING, "Length cannot be negative");
1832+
RETURN_FALSE;
1833+
}
1834+
18201835
if ((php_sock = (php_socket *)zend_fetch_resource(Z_RES_P(arg1), le_socket_name, le_socket)) == NULL) {
18211836
RETURN_FALSE;
18221837
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
ext/sockets - socket_send - test with incorrect parameters
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('sockets')) {
6+
die('skip sockets extension not available.');
7+
}
8+
?>
9+
--FILE--
10+
<?php
11+
$rand = rand(1,999);
12+
$s_c = socket_create_listen(31330+$rand);
13+
$s_w = socket_send($s_c, "foo", -1, MSG_OOB);
14+
socket_close($s_c);
15+
?>
16+
--EXPECTF--
17+
Warning: socket_send(): Length cannot be negative in %s on line %i
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
ext/sockets - socket_sendto - test with incorrect parameters
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('sockets')) {
6+
die('skip sockets extension not available.');
7+
}
8+
?>
9+
--FILE--
10+
<?php
11+
$rand = rand(1,999);
12+
$s_c = socket_create_listen(31330+$rand);
13+
$s_w = socket_sendto($s_c, "foo", -1, MSG_OOB, '127.0.0.1');
14+
socket_close($s_c);
15+
?>
16+
--EXPECTF--
17+
Warning: socket_sendto(): Length cannot be negative in %s on line %i

ext/sockets/tests/socket_write_params.phpt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ fa@php.net
1717
$s_c = socket_create_listen(31330+$rand);
1818
$s_w = socket_write($s_c);
1919
$s_w = socket_write($s_c, "foo");
20+
$s_w = socket_write($s_c, "foo", -1);
2021
socket_close($s_c);
2122
?>
2223
--EXPECTF--
@@ -25,3 +26,5 @@ Warning: socket_write() expects at least 2 parameters, 0 given in %s on line %i
2526
Warning: socket_write() expects at least 2 parameters, 1 given in %s on line %i
2627

2728
Warning: socket_write(): unable to write to socket [%i]: %a in %s on line %i
29+
30+
Warning: socket_write(): Length cannot be negative in %s on line %i

0 commit comments

Comments
 (0)