`phar_path_check()` already strips a leading slash, so we must not
attempt to strip the trailing slash from an now empty directory name.
Closes GH-6508.
- Phar:
. Fixed bug #73809 (Phar Zip parse crash - mmap fail). (cmb)
- . Fixed #75102 (`PharData` says invalid checksum for valid tar). (cmb)
+ . Fixed bug #75102 (`PharData` says invalid checksum for valid tar). (cmb)
+ . Fixed bug #77322 (PharData::addEmptyDir('/') Possible integer overflow).
+ (cmb)
- PDO MySQL:
. Fixed bug #80458 (PDOStatement::fetchAll() throws for upsert queries).
--- /dev/null
+--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');
+?>
} 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--;
}