summaryrefslogtreecommitdiff
path: root/ext/phar/phar.c
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2011-11-19 04:59:56 +0000
committerStanislav Malyshev <stas@php.net>2011-11-19 04:59:56 +0000
commit449907fb7633b4db35b9da1795688c597967ba6c (patch)
treee9d6860981f7d22e1be4efed59110482d01eb709 /ext/phar/phar.c
parent1d0d8abc5fd13bb6021de8cf2c5240c55936de6e (diff)
downloadphp-git-449907fb7633b4db35b9da1795688c597967ba6c.tar.gz
fix bug #60164 (Stubs of a specific length break phar_open_from_fp scanning for __HALT_COMPILER)
Diffstat (limited to 'ext/phar/phar.c')
-rw-r--r--ext/phar/phar.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index 24d8c428af..e201ca50d0 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -1569,7 +1569,9 @@ static int phar_open_from_fp(php_stream* fp, char *fname, int fname_len, char *a
const char zip_magic[] = "PK\x03\x04";
const char gz_magic[] = "\x1f\x8b\x08";
const char bz_magic[] = "BZh";
- char *pos, buffer[1024 + sizeof(token)], test = '\0';
+ char *pos, test = '\0';
+ const int window_size = 1024;
+ char buffer[window_size + sizeof(token)]; /* a 1024 byte window + the size of the halt_compiler token (moving window) */
const long readsize = sizeof(buffer) - sizeof(token);
const long tokenlen = sizeof(token) - 1;
long halt_offset;
@@ -1717,7 +1719,7 @@ static int phar_open_from_fp(php_stream* fp, char *fname, int fname_len, char *a
}
halt_offset += got;
- memmove(buffer, buffer + tokenlen, got + 1);
+ memmove(buffer, buffer + window_size, tokenlen); /* move the memory buffer by the size of the window */
}
MAPPHAR_ALLOC_FAIL("internal corruption of phar \"%s\" (__HALT_COMPILER(); not found)")