Skip to content
Permalink
Browse files Browse the repository at this point in the history
Fix bug #72114 - int/size_t confusion in fread
  • Loading branch information
smalyshev committed May 10, 2016
1 parent 95ed19a commit abd159c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
6 changes: 6 additions & 0 deletions ext/standard/file.c
Expand Up @@ -1758,6 +1758,12 @@ PHPAPI PHP_FUNCTION(fread)
RETURN_FALSE;
}

if (len > INT_MAX) {
/* string length is int in 5.x so we can not read more than int */
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Length parameter must be no more than %d", INT_MAX);
RETURN_FALSE;
}

Z_STRVAL_P(return_value) = emalloc(len + 1);
Z_STRLEN_P(return_value) = php_stream_read(stream, Z_STRVAL_P(return_value), len);

Expand Down
12 changes: 12 additions & 0 deletions ext/standard/tests/file/bug72114.phpt
@@ -0,0 +1,12 @@
--TEST--
Bug #72114 (Integer underflow / arbitrary null write in fread/gzread)
--FILE--
<?php
ini_set('memory_limit', "2500M");
$fp = fopen("/dev/zero", "r");
fread($fp, 2147483648);
?>
Done
--EXPECTF--
Warning: fread(): Length parameter must be no more than 2147483647 in %s/bug72114.php on line %d
Done

0 comments on commit abd159c

Please sign in to comment.