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: Tue, 14 Apr 2015 07:03:50 +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-86175@lists.php.net to get a copy of this message
Commit: f59b67ae50064560d7bfcdb0d6a8ab284179053c Author: Stanislav Malyshev <stas@php.net> Tue, 14 Apr 2015 00:03:50 -0700 Parents: 45facd15fb1be704ee1ae374fa306dad8450edbd Branches: PHP-5.4 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f59b67ae50064560d7bfcdb0d6a8ab284179053c 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 fcfc864..84282d2 100644 --- a/ext/phar/phar_internal.h +++ b/ext/phar/phar_internal.h @@ -618,10 +618,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 (#86175) next »