com php-src: Fix bug #69441 (Buffer Overflow when parsing tar/zip/phar in phar_set_inode): ext/phar/phar_internal.h ext/p har/tests/bug69441.phar
ext/phar/tests/bug69 441.phpt

From: Date: Wed, 15 Apr 2015 08:19:40 +0000
Subject: com php-src: Fix bug #69441 (Buffer Overflow when parsing tar/zip/phar in phar_set_inode): ext/phar/phar_internal.h ext/p har/tests/bug69441.phar
ext/phar/tests/bug69 441.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-86257@lists.php.net to get a copy of this message
Commit: 945b9ffee666e147231a1f37da69eb8d05e3193c Author: Stanislav Malyshev <stas@php.net> Tue, 14 Apr 2015 00:03:50 -0700 Committer: Julien Pauli <jpauli@php.net> Wed, 15 Apr 2015 10:19:40 +0200 Parents: fe0e4226953e86122266427fb1b42adafabe2821 Branches: PHP-5.5.24 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=945b9ffee666e147231a1f37da69eb8d05e3193c Log: Fix bug #69441 (Buffer Overflow when parsing tar/zip/phar in phar_set_inode) Bugs: https://bugs..php.net/69441 Changed paths: M ext/phar/phar_internal.h A ext/phar/tests/bug69441.phar A ext/phar/tests/bug69441.phpt Diff: diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h index 9b18e9e..e97c9b5 100644 --- a/ext/phar/phar_internal.h +++ b/ext/phar/phar_internal.h @@ -561,10 +561,13 @@ static inline void phar_set_inode(phar_entry_info *entry TSRMLS_DC) /* {{{ */ { char tmp[MAXPATHLEN]; int tmp_len; + size_t len; - tmp_len = entry->filename_len + entry->phar->fname_len; - memcpy(tmp, entry->phar->fname, entry->phar->fname_len); - memcpy(tmp + entry->phar->fname_len, entry->filename, entry->filename_len); + tmp_len = MIN(MAXPATHLEN, entry->filename_len + entry->phar->fname_len); + len = MIN(entry->phar->fname_len, tmp_len); + memcpy(tmp, entry->phar->fname, len); + len = MIN(tmp_len - len, entry->filename_len); + memcpy(tmp + entry->phar->fname_len, entry->filename, len); entry->inode = (unsigned short)zend_get_hash_value(tmp, tmp_len); } /* }}} */ diff --git a/ext/phar/tests/bug69441.phar b/ext/phar/tests/bug69441.phar new file mode 100644 index 0000000..80956dc Binary files /dev/null and b/ext/phar/tests/bug69441.phar differ diff --git a/ext/phar/tests/bug69441.phpt b/ext/phar/tests/bug69441.phpt new file mode 100644 index 0000000..ed461cf --- /dev/null +++ b/ext/phar/tests/bug69441.phpt @@ -0,0 +1,21 @@ +--TEST-- +Phar: bug #69441: Buffer Overflow when parsing tar/zip/phar in phar_set_inode +--SKIPIF-- +<?php if (!extension_loaded("phar")) die("skip"); ?> +--FILE-- +<?php +$fname = dirname(__FILE__) . '/bug69441.phar'; +try { +$r = new Phar($fname, 0); +} catch(UnexpectedValueException $e) { + echo $e; +} +?> + +==DONE== +--EXPECTF-- +exception 'UnexpectedValueException' with message 'phar error: corrupted central directory entry, no magic signature in zip-based phar "%s/bug69441.phar"' in %s/bug69441.php:%d +Stack trace: +#0 %s/bug69441.php(%d): Phar->__construct('%s', 0) +#1 {main} +==DONE== \ No newline at end of file

« previous php.cvs (#86257) next »