summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2008-07-17 14:05:07 +0000
committerDmitry Stogov <dmitry@php.net>2008-07-17 14:05:07 +0000
commit67b77b06e5c7fbd9e9c82a9abcbcbd2aabf5259f (patch)
treecd95c647d8faf1007b1c6a9b4b036980d03baf00
parent5c631e8765eec0119fd9a095ad9c2a953f62746a (diff)
downloadphp-git-67b77b06e5c7fbd9e9c82a9abcbcbd2aabf5259f.tar.gz
Fixed search on uninitialized data
-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 db5b80f1e1..ac370af532 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -1427,7 +1427,9 @@ static inline char *phar_strnstr(const char *buf, int buf_len, const char *searc
const char *c;
int so_far = 0;
- /* this assumes buf_len > search_len */
+ if (buf_len < search_len) {
+ return NULL;
+ }
c = buf - 1;
do {
if (!(c = memchr(c + 1, search[0], buf_len - search_len - so_far))) {
@@ -1579,7 +1581,7 @@ static int phar_open_from_fp(php_stream* fp, char *fname, int fname_len, char *a
}
}
}
- if ((pos = phar_strnstr(buffer, 1024 + sizeof(token), token, sizeof(token)-1)) != NULL) {
+ if (got > 0 && (pos = phar_strnstr(buffer, got + sizeof(token), token, sizeof(token)-1)) != NULL) {
halt_offset += (pos - buffer); /* no -tokenlen+tokenlen here */
return phar_parse_pharfile(fp, fname, fname_len, alias, alias_len, halt_offset, pphar, compression, error TSRMLS_CC);
}