summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2016-01-16 20:43:43 -0800
committerStanislav Malyshev <stas@php.net>2016-01-16 20:43:43 -0800
commit1c1b8b69982375700d4b011eb89ea48b66dbd5aa (patch)
tree90a4311e8b91d7747c437ade567b8ac164e17496
parent285cd3417fb61597345b829f5f573707bbdcd484 (diff)
downloadphp-git-1c1b8b69982375700d4b011eb89ea48b66dbd5aa.tar.gz
Fix bug #71391: NULL Pointer Dereference in phar_tar_setupmetadata()
-rw-r--r--ext/phar/tar.c3
-rw-r--r--ext/phar/tests/bug71391.phpt18
-rw-r--r--ext/phar/tests/bug71391.tarbin0 -> 3584 bytes
3 files changed, 21 insertions, 0 deletions
diff --git a/ext/phar/tar.c b/ext/phar/tar.c
index 34ef0ef892..5f2680590e 100644
--- a/ext/phar/tar.c
+++ b/ext/phar/tar.c
@@ -880,6 +880,9 @@ static int phar_tar_setupmetadata(void *pDest, void *argument TSRMLS_DC) /* {{{
if (entry->filename_len >= sizeof(".phar/.metadata") && !memcmp(entry->filename, ".phar/.metadata", sizeof(".phar/.metadata")-1)) {
if (entry->filename_len == sizeof(".phar/.metadata.bin")-1 && !memcmp(entry->filename, ".phar/.metadata.bin", sizeof(".phar/.metadata.bin")-1)) {
+ if (entry->phar->metadata == NULL) {
+ return ZEND_HASH_APPLY_REMOVE;
+ }
return phar_tar_setmetadata(entry->phar->metadata, entry, error TSRMLS_CC);
}
/* search for the file this metadata entry references */
diff --git a/ext/phar/tests/bug71391.phpt b/ext/phar/tests/bug71391.phpt
new file mode 100644
index 0000000000..b8d84f5375
--- /dev/null
+++ b/ext/phar/tests/bug71391.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Phar: bug #71391: NULL Pointer Dereference in phar_tar_setupmetadata()
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--FILE--
+<?php
+// duplicate since the tar will change
+copy(__DIR__."/bug71391.tar", __DIR__."/bug71391.test.tar");
+$p = new PharData(__DIR__."/bug71391.test.tar");
+$p->delMetaData();
+?>
+DONE
+--CLEAN--
+<?php
+unlink(__DIR__."/bug71391.test.tar");
+?>
+--EXPECT--
+DONE \ No newline at end of file
diff --git a/ext/phar/tests/bug71391.tar b/ext/phar/tests/bug71391.tar
new file mode 100644
index 0000000000..a5b155ac87
--- /dev/null
+++ b/ext/phar/tests/bug71391.tar
Binary files differ