@@ -266,6 +266,7 @@ static int php_read(int bsd_socket, void *buf, size_t maxlen, int flags)
266
266
267
267
set_errno (0 );
268
268
269
+ * t = '\0' ;
269
270
while (* t != '\n' && * t != '\r' && n < maxlen ) {
270
271
if (m > 0 ) {
271
272
t ++ ;
@@ -828,6 +829,11 @@ PHP_FUNCTION(socket_read)
828
829
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "rl|l" , & arg1 , & length , & type ) == FAILURE )
829
830
return ;
830
831
832
+ /* overflow check */
833
+ if ((length + 1 ) < 2 ) {
834
+ RETURN_FALSE ;
835
+ }
836
+
831
837
tmpbuf = emalloc (length + 1 );
832
838
833
839
ZEND_FETCH_RESOURCE (php_sock , php_socket * , & arg1 , -1 , le_socket_name , le_socket );
@@ -1225,6 +1231,11 @@ PHP_FUNCTION(socket_recv)
1225
1231
1226
1232
ZEND_FETCH_RESOURCE (php_sock , php_socket * , & php_sock_res , -1 , le_socket_name , le_socket );
1227
1233
1234
+ /* overflow check */
1235
+ if ((len + 1 ) < 2 ) {
1236
+ RETURN_FALSE ;
1237
+ }
1238
+
1228
1239
recv_buf = emalloc (len + 1 );
1229
1240
memset (recv_buf , 0 , len + 1 );
1230
1241
@@ -1301,6 +1312,11 @@ PHP_FUNCTION(socket_recvfrom)
1301
1312
1302
1313
ZEND_FETCH_RESOURCE (php_sock , php_socket * , & arg1 , -1 , le_socket_name , le_socket );
1303
1314
1315
+ /* overflow check */
1316
+ if ((arg3 + 2 ) < 3 ) {
1317
+ RETURN_FALSE ;
1318
+ }
1319
+
1304
1320
recv_buf = emalloc (arg3 + 2 );
1305
1321
memset (recv_buf , 0 , arg3 + 2 );
1306
1322
0 commit comments