- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/tar_gz.php
- Класс: CArchiver
- Вызов: CArchiver::_readHeader
private function _readHeader($v_binary_data, &$v_header)
{
if (strlen($v_binary_data) == 0)
{
$v_header['filename'] = '';
return true;
}
if (strlen($v_binary_data) != 512)
{
$v_header['filename'] = '';
$this->_arErrors[] = ["INV_BLOCK_SIZE", str_replace("#BLOCK_SIZE#", strlen($v_binary_data), GetMessage("MAIN_ARCHIVE_INV_BLOCK_SIZE"))];
return false;
}
$v_checksum = 0;
for ($i = 0; $i < 148; $i++)
{
$v_checksum += ord(substr($v_binary_data, $i, 1));
}
for ($i = 148; $i < 156; $i++)
{
$v_checksum += ord(' ');
}
for ($i = 156; $i < 512; $i++)
{
$v_checksum += ord(substr($v_binary_data, $i, 1));
}
//changed
$v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor/a131prefix", $v_binary_data);
$v_header['checksum'] = octdec(trim($v_data['checksum']));
if ($v_header['checksum'] != $v_checksum)
{
$v_header['filename'] = '';
if (($v_checksum == 256) && ($v_header['checksum'] == 0))
{
return true;
}
$this->_arErrors[] = ["INV_BLOCK_CHECK", GetMessage("MAIN_ARCHIVE_INV_BLOCK_CHECK1")];
return false;
}
// ----- Extract the properties
$v_header['filename'] = trim($v_data['prefix'] . "/" . $v_data['filename']);
$v_header['mode'] = octdec(trim($v_data['mode']));
$v_header['uid'] = octdec(trim($v_data['uid']));
$v_header['gid'] = octdec(trim($v_data['gid']));
$v_header['size'] = octdec(trim($v_data['size']));
$v_header['mtime'] = octdec(trim($v_data['mtime']));
if (($v_header['typeflag'] = $v_data['typeflag']) == "5")
{
$v_header['size'] = 0;
}
$v_header['filename'] = BitrixMainIOPath::normalize($v_header['filename']);
return true;
}