summaryrefslogtreecommitdiff
path: root/ext/phar
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-12-15 11:46:46 +0100
committerChristoph M. Becker <cmbecker69@gmx.de>2020-12-15 11:46:46 +0100
commit6b37cdda669d40b1f3059ddb2625543b3358b8ff (patch)
tree9e290f8824ed5010624768a5ed3f0cb5aa4c24b7 /ext/phar
parent6e2614ef6ca176a7f2f79142f662f5cc0a12cace (diff)
parentc2fbab392c5b25aeb2daf243f4107557416942fb (diff)
downloadphp-git-6b37cdda669d40b1f3059ddb2625543b3358b8ff.tar.gz
Merge branch 'PHP-8.0'
* PHP-8.0: Fix #77322: PharData::addEmptyDir('/') Possible integer overflow
Diffstat (limited to 'ext/phar')
-rw-r--r--ext/phar/tests/bug77322.phpt24
-rw-r--r--ext/phar/util.c2
2 files changed, 25 insertions, 1 deletions
diff --git a/ext/phar/tests/bug77322.phpt b/ext/phar/tests/bug77322.phpt
new file mode 100644
index 0000000000..b9e5ce4dba
--- /dev/null
+++ b/ext/phar/tests/bug77322.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Bug #77322 (PharData::addEmptyDir('/') Possible integer overflow)
+--SKIPIF--
+<?php
+if (!extension_loaded('phar')) die('skip phar extension not available');
+?>
+--FILE--
+<?php
+$zip = new PharData(__DIR__ . '/bug77322.zip');
+$zip->addEmptyDir('/');
+var_dump($zip->count());
+
+$tar = new PharData(__DIR__ . '/bug77322.tar');
+$tar->addEmptyDir('/');
+var_dump($tar->count());
+?>
+--EXPECT--
+int(1)
+int(1)
+--CLEAN--
+<?php
+unlink(__DIR__ . '/bug77322.zip');
+unlink(__DIR__ . '/bug77322.tar');
+?>
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 6c084d8458..b45251d14a 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -567,7 +567,7 @@ phar_entry_data *phar_get_or_create_entry_data(char *fname, size_t fname_len, ch
} else {
etemp.flags = etemp.old_flags = PHAR_ENT_PERM_DEF_FILE;
}
- if (is_dir) {
+ if (is_dir && path_len) {
etemp.filename_len--; /* strip trailing / */
path_len--;
}