Chris@18: manifestLength = Reader::resolveFourByteLittleEndian($content, 0); Chris@18: $target->amountOfFiles = Reader::resolveFourByteLittleEndian($content, 4); Chris@18: $target->flags = Reader::resolveFourByteLittleEndian($content, 10); Chris@18: $target->aliasLength = Reader::resolveFourByteLittleEndian($content, 14); Chris@18: $target->alias = substr($content, 18, $target->aliasLength); Chris@18: $target->metaDataLength = Reader::resolveFourByteLittleEndian($content, 18 + $target->aliasLength); Chris@18: $target->metaData = substr($content, 22 + $target->aliasLength, $target->metaDataLength); Chris@18: Chris@18: $apiVersionNibbles = Reader::resolveTwoByteBigEndian($content, 8); Chris@18: $target->apiVersion = implode('.', array( Chris@18: ($apiVersionNibbles & 0xf000) >> 12, Chris@18: ($apiVersionNibbles & 0x0f00) >> 8, Chris@18: ($apiVersionNibbles & 0x00f0) >> 4, Chris@18: )); Chris@18: Chris@18: return $target; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @var int Chris@18: */ Chris@18: private $manifestLength; Chris@18: Chris@18: /** Chris@18: * @var int Chris@18: */ Chris@18: private $amountOfFiles; Chris@18: Chris@18: /** Chris@18: * @var string Chris@18: */ Chris@18: private $apiVersion; Chris@18: Chris@18: /** Chris@18: * @var int Chris@18: */ Chris@18: private $flags; Chris@18: Chris@18: /** Chris@18: * @var int Chris@18: */ Chris@18: private $aliasLength; Chris@18: Chris@18: /** Chris@18: * @var string Chris@18: */ Chris@18: private $alias; Chris@18: Chris@18: /** Chris@18: * @var int Chris@18: */ Chris@18: private $metaDataLength; Chris@18: Chris@18: /** Chris@18: * @var string Chris@18: */ Chris@18: private $metaData; Chris@18: Chris@18: /** Chris@18: * Avoid direct instantiation. Chris@18: */ Chris@18: private function __construct() Chris@18: { Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return int Chris@18: */ Chris@18: public function getManifestLength() Chris@18: { Chris@18: return $this->manifestLength; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return int Chris@18: */ Chris@18: public function getAmountOfFiles() Chris@18: { Chris@18: return $this->amountOfFiles; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return string Chris@18: */ Chris@18: public function getApiVersion() Chris@18: { Chris@18: return $this->apiVersion; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return int Chris@18: */ Chris@18: public function getFlags() Chris@18: { Chris@18: return $this->flags; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return int Chris@18: */ Chris@18: public function getAliasLength() Chris@18: { Chris@18: return $this->aliasLength; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return string Chris@18: */ Chris@18: public function getAlias() Chris@18: { Chris@18: return $this->alias; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return int Chris@18: */ Chris@18: public function getMetaDataLength() Chris@18: { Chris@18: return $this->metaDataLength; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return string Chris@18: */ Chris@18: public function getMetaData() Chris@18: { Chris@18: return $this->metaData; Chris@18: } Chris@18: Chris@18: /** Chris@18: * @return mixed|null Chris@18: */ Chris@18: public function deserializeMetaData() Chris@18: { Chris@18: if (empty($this->metaData)) { Chris@18: return null; Chris@18: } Chris@18: Chris@18: $result = Unserialize::unserialize($this->metaData, array('allowed_classes' => false)); Chris@18: Chris@18: $serialized = json_encode($result); Chris@18: if (strpos($serialized, '__PHP_Incomplete_Class_Name') !== false) { Chris@18: throw new DeserializationException( Chris@18: 'Meta-data contains serialized object', Chris@18: 1539623382 Chris@18: ); Chris@18: } Chris@18: Chris@18: return $result; Chris@18: } Chris@18: }