summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2014-09-19 20:13:46 +0200
committerAnatol Belski <ab@php.net>2014-09-19 20:13:46 +0200
commit6213d9fc91de457b08e574a0f1ac8073eb948b17 (patch)
tree924b3ecb7ea7c0e0cd3285465eaef9d31881f538
parent24ed330a22288afec2bec156b6d5cf049e575b7f (diff)
parent5d9403f56c14fefafa558b7de45f132a4d3f5fde (diff)
downloadphp-git-6213d9fc91de457b08e574a0f1ac8073eb948b17.tar.gz
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5: fix possible array underflow
-rw-r--r--ext/standard/image.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/ext/standard/image.c b/ext/standard/image.c
index 02246c6268..f1910d2191 100644
--- a/ext/standard/image.c
+++ b/ext/standard/image.c
@@ -365,8 +365,8 @@ static unsigned short php_read2(php_stream * stream TSRMLS_DC)
{
unsigned char a[2];
- /* just return 0 if we hit the end-of-file */
- if((php_stream_read(stream, a, sizeof(a))) <= 0) return 0;
+ /* return 0 if we couldn't read enough data */
+ if((php_stream_read(stream, a, sizeof(a))) < sizeof(a)) return 0;
return (((unsigned short)a[0]) << 8) + ((unsigned short)a[1]);
}
@@ -646,7 +646,7 @@ static struct gfxinfo *php_handle_jpc(php_stream * stream TSRMLS_DC)
#endif
result->channels = php_read2(stream TSRMLS_CC); /* Csiz */
- if (result->channels < 0 || result->channels > 256) {
+ if (result->channels == 0 && php_stream_eof(stream) || result->channels > 256) {
efree(result);
return NULL;
}