123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?php
- namespace TYPO3\PharStreamWrapper\Phar;
- /*
- * This file is part of the TYPO3 project.
- *
- * It is free software; you can redistribute it and/or modify it under the terms
- * of the MIT License (MIT). For the full copyright and license information,
- * please read the LICENSE file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
- use Brumann\Polyfill\Unserialize;
- class Manifest
- {
- /**
- * @param string $content
- * @return self
- * @see http://php.net/manual/en/phar.fileformat.phar.php
- */
- public static function fromContent($content)
- {
- $target = new static();
- $target->manifestLength = Reader::resolveFourByteLittleEndian($content, 0);
- $target->amountOfFiles = Reader::resolveFourByteLittleEndian($content, 4);
- $target->flags = Reader::resolveFourByteLittleEndian($content, 10);
- $target->aliasLength = Reader::resolveFourByteLittleEndian($content, 14);
- $target->alias = substr($content, 18, $target->aliasLength);
- $target->metaDataLength = Reader::resolveFourByteLittleEndian($content, 18 + $target->aliasLength);
- $target->metaData = substr($content, 22 + $target->aliasLength, $target->metaDataLength);
- $apiVersionNibbles = Reader::resolveTwoByteBigEndian($content, 8);
- $target->apiVersion = implode('.', array(
- ($apiVersionNibbles & 0xf000) >> 12,
- ($apiVersionNibbles & 0x0f00) >> 8,
- ($apiVersionNibbles & 0x00f0) >> 4,
- ));
- return $target;
- }
- /**
- * @var int
- */
- private $manifestLength;
- /**
- * @var int
- */
- private $amountOfFiles;
- /**
- * @var string
- */
- private $apiVersion;
- /**
- * @var int
- */
- private $flags;
- /**
- * @var int
- */
- private $aliasLength;
- /**
- * @var string
- */
- private $alias;
- /**
- * @var int
- */
- private $metaDataLength;
- /**
- * @var string
- */
- private $metaData;
- /**
- * Avoid direct instantiation.
- */
- private function __construct()
- {
- }
- /**
- * @return int
- */
- public function getManifestLength()
- {
- return $this->manifestLength;
- }
- /**
- * @return int
- */
- public function getAmountOfFiles()
- {
- return $this->amountOfFiles;
- }
- /**
- * @return string
- */
- public function getApiVersion()
- {
- return $this->apiVersion;
- }
- /**
- * @return int
- */
- public function getFlags()
- {
- return $this->flags;
- }
- /**
- * @return int
- */
- public function getAliasLength()
- {
- return $this->aliasLength;
- }
- /**
- * @return string
- */
- public function getAlias()
- {
- return $this->alias;
- }
- /**
- * @return int
- */
- public function getMetaDataLength()
- {
- return $this->metaDataLength;
- }
- /**
- * @return string
- */
- public function getMetaData()
- {
- return $this->metaData;
- }
- /**
- * @return mixed|null
- */
- public function deserializeMetaData()
- {
- if (empty($this->metaData)) {
- return null;
- }
- $result = Unserialize::unserialize($this->metaData, array('allowed_classes' => false));
- $serialized = json_encode($result);
- if (strpos($serialized, '__PHP_Incomplete_Class_Name') !== false) {
- throw new DeserializationException(
- 'Meta-data contains serialized object',
- 1539623382
- );
- }
- return $result;
- }
- }
|