diff --git a/core/lib/Drupal/Core/Archiver/ArchiveTar.php b/core/lib/Drupal/Core/Archiver/ArchiveTar.php index e05a7e9..a639f51 100644 --- a/core/lib/Drupal/Core/Archiver/ArchiveTar.php +++ b/core/lib/Drupal/Core/Archiver/ArchiveTar.php @@ -44,6 +44,13 @@ //require_once 'PEAR.php'; // +// OS_WINDOWS as defined in PEAR.php +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); +} else { + define('OS_WINDOWS', false); +} + define('ARCHIVE_TAR_ATT_SEPARATOR', 90001); define('ARCHIVE_TAR_END_BLOCK', pack("a512", '')); @@ -1674,7 +1681,7 @@ function _readHeader($v_binary_data, &$v_header) } // ----- Extract the properties - $v_header['filename'] = $v_data['filename']; + $v_header['filename'] = rtrim($v_data['filename'], "\0"); if ($this->_maliciousFilename($v_header['filename'])) { $this->_error( 'Malicious .tar detected, file "' . $v_header['filename'] . @@ -1730,6 +1737,7 @@ function _maliciousFilename($file) function _readLongHeader(&$v_header) { $v_filename = ''; + $v_filesize = $v_header['size']; $n = floor($v_header['size']/512); for ($i=0; $i<$n; $i++) { $v_content = $this->_readBlock(); @@ -1737,7 +1745,7 @@ function _readLongHeader(&$v_header) } if (($v_header['size'] % 512) != 0) { $v_content = $this->_readBlock(); - $v_filename .= trim($v_content); + $v_filename .= $v_content; } // ----- Read the next header @@ -1747,7 +1755,7 @@ function _readLongHeader(&$v_header) return false; } - $v_filename = trim($v_filename); + $v_filename = rtrim(substr($v_filename, 0, $v_filesize), "\0"); $v_header['filename'] = $v_filename; if ($this->_maliciousFilename($v_filename)) { $this->_error(