Unexpected path truncation of files contained in a tar file by `PharData::extractTo()`
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Description
The following code:
<?php
$long_path = 'a-very-long-path/to-a-file/with-a-very-long-name/in-a-deep-directory-structure';
if (!is_dir($long_path)) {
mkdir($long_path, recursive: true);
touch($long_path . '/a-php-file-with-a-very-long-name.php');
}
foreach (['ustar', 'posix', 'gnu'] as $format) {
echo sprintf('Format: %s', $format) . PHP_EOL;
$archive = sprintf('archive-%s.tar', $format);
$tpm_dir = sys_get_temp_dir() . '/' . $format . '-' . bin2hex(random_bytes(10));
$command = sprintf('tar --create --file=%s --format=%s a-very-long-path', $archive, $format);
exec($command);
$tar = new PharData($archive);
$tar->extractTo($tpm_dir, overwrite: true);
$dir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($tpm_dir));
foreach ($dir as $file) {
if (!$file->isFile()) {
continue;
}
echo '> ' . str_replace($tpm_dir . '/', '', $file->getRealPath()) . PHP_EOL;
}
echo PHP_EOL;
}
Resulted in this output:
Format: ustar
> a-very-long-path/to-a-file/with-a-very-long-name/in-a-deep-directory-structure/a-php-file-with-a-very-long-name.php
Format: posix
> a-very-long-path/to-a-file/with-a-very-long-name/in-a-deep-directory-structure/a-php-file-with-a-ver
Format: gnu
> a-very-long-path/to-a-file/with-a-very-long-name/in-a-deep-directory-structure/a-php-file-with-a-very-long-name.php
But I expected this output instead:
Format: ustar
> a-very-long-path/to-a-file/with-a-very-long-name/in-a-deep-directory-structure/a-php-file-with-a-very-long-name.php
Format: posix
> a-very-long-path/to-a-file/with-a-very-long-name/in-a-deep-directory-structure/a-php-file-with-a-very-long-name.php
Format: gnu
> a-very-long-path/to-a-file/with-a-very-long-name/in-a-deep-directory-structure/a-php-file-with-a-very-long-name.php
I did not find a clear summary of the different tar formats limitations, but as far as I understand,
As described in https://www.gnu.org/software/tar/manual/html_section/Formats.html, the pax tar format (POSIX 1003.1-2001) should not have this 100 chars limitation on the files path.
When extracted with the tar utility, the paths are not truncated.
PHP Version
PHP 8.4.10 (cli) (built: Jul 22 2025 01:19:35) (NTS)
Copyright (c) The PHP Group
Built by https://github.com/docker-library/php
Zend Engine v4.4.10, Copyright (c) Zend Technologies
with Zend OPcache v8.4.10, Copyright (c), by Zend Technologies
with Xdebug v3.4.5, Copyright (c) 2002-2025, by Derick Rethans
Operating System
PHP docker image based on Debian, executed on Ubuntu 24.04
- Lenguaje dominante
- C
- Estrellas
- 40.4k
- Forks
- 8.2k
- Merge medio
- 2 d 15 h
- PR fusionados (30 d)
- 103
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de php/php-src
-
Bug SAPI: cli_server Status: Verified
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Bug Status: Needs Triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
Bug Status: Needs Triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
-
Bug Status: Needs Triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Flaky hrtime.phpt test AbiertoBug Category: Tests Status: Verified
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Todos los issues de php/php-src
Issues similares
-
[adam] AdamNet network read doesn't cap to MAX_ADAM_PACKET_LEN, overflows client receive buffers Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
FujiNetWIFI/fujinet-firmware#1649 · 2 comentarios ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
HarbourMasters/Shipwright#7229 ·
-
Error while building from source Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
riscv-software-src/riscv-isa-sim#2435 · 1 comentario ·
-
bug Self Built Image SNAPSHOT Supported Device target/ramips
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100