annotate vendor/typo3/phar-stream-wrapper/src/Phar/Manifest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@18 1 <?php
Chris@18 2 namespace TYPO3\PharStreamWrapper\Phar;
Chris@18 3
Chris@18 4 /*
Chris@18 5 * This file is part of the TYPO3 project.
Chris@18 6 *
Chris@18 7 * It is free software; you can redistribute it and/or modify it under the terms
Chris@18 8 * of the MIT License (MIT). For the full copyright and license information,
Chris@18 9 * please read the LICENSE file that was distributed with this source code.
Chris@18 10 *
Chris@18 11 * The TYPO3 project - inspiring people to share!
Chris@18 12 */
Chris@18 13
Chris@18 14 use Brumann\Polyfill\Unserialize;
Chris@18 15
Chris@18 16 class Manifest
Chris@18 17 {
Chris@18 18 /**
Chris@18 19 * @param string $content
Chris@18 20 * @return self
Chris@18 21 * @see http://php.net/manual/en/phar.fileformat.phar.php
Chris@18 22 */
Chris@18 23 public static function fromContent($content)
Chris@18 24 {
Chris@18 25 $target = new static();
Chris@18 26 $target->manifestLength = Reader::resolveFourByteLittleEndian($content, 0);
Chris@18 27 $target->amountOfFiles = Reader::resolveFourByteLittleEndian($content, 4);
Chris@18 28 $target->flags = Reader::resolveFourByteLittleEndian($content, 10);
Chris@18 29 $target->aliasLength = Reader::resolveFourByteLittleEndian($content, 14);
Chris@18 30 $target->alias = substr($content, 18, $target->aliasLength);
Chris@18 31 $target->metaDataLength = Reader::resolveFourByteLittleEndian($content, 18 + $target->aliasLength);
Chris@18 32 $target->metaData = substr($content, 22 + $target->aliasLength, $target->metaDataLength);
Chris@18 33
Chris@18 34 $apiVersionNibbles = Reader::resolveTwoByteBigEndian($content, 8);
Chris@18 35 $target->apiVersion = implode('.', array(
Chris@18 36 ($apiVersionNibbles & 0xf000) >> 12,
Chris@18 37 ($apiVersionNibbles & 0x0f00) >> 8,
Chris@18 38 ($apiVersionNibbles & 0x00f0) >> 4,
Chris@18 39 ));
Chris@18 40
Chris@18 41 return $target;
Chris@18 42 }
Chris@18 43
Chris@18 44 /**
Chris@18 45 * @var int
Chris@18 46 */
Chris@18 47 private $manifestLength;
Chris@18 48
Chris@18 49 /**
Chris@18 50 * @var int
Chris@18 51 */
Chris@18 52 private $amountOfFiles;
Chris@18 53
Chris@18 54 /**
Chris@18 55 * @var string
Chris@18 56 */
Chris@18 57 private $apiVersion;
Chris@18 58
Chris@18 59 /**
Chris@18 60 * @var int
Chris@18 61 */
Chris@18 62 private $flags;
Chris@18 63
Chris@18 64 /**
Chris@18 65 * @var int
Chris@18 66 */
Chris@18 67 private $aliasLength;
Chris@18 68
Chris@18 69 /**
Chris@18 70 * @var string
Chris@18 71 */
Chris@18 72 private $alias;
Chris@18 73
Chris@18 74 /**
Chris@18 75 * @var int
Chris@18 76 */
Chris@18 77 private $metaDataLength;
Chris@18 78
Chris@18 79 /**
Chris@18 80 * @var string
Chris@18 81 */
Chris@18 82 private $metaData;
Chris@18 83
Chris@18 84 /**
Chris@18 85 * Avoid direct instantiation.
Chris@18 86 */
Chris@18 87 private function __construct()
Chris@18 88 {
Chris@18 89 }
Chris@18 90
Chris@18 91 /**
Chris@18 92 * @return int
Chris@18 93 */
Chris@18 94 public function getManifestLength()
Chris@18 95 {
Chris@18 96 return $this->manifestLength;
Chris@18 97 }
Chris@18 98
Chris@18 99 /**
Chris@18 100 * @return int
Chris@18 101 */
Chris@18 102 public function getAmountOfFiles()
Chris@18 103 {
Chris@18 104 return $this->amountOfFiles;
Chris@18 105 }
Chris@18 106
Chris@18 107 /**
Chris@18 108 * @return string
Chris@18 109 */
Chris@18 110 public function getApiVersion()
Chris@18 111 {
Chris@18 112 return $this->apiVersion;
Chris@18 113 }
Chris@18 114
Chris@18 115 /**
Chris@18 116 * @return int
Chris@18 117 */
Chris@18 118 public function getFlags()
Chris@18 119 {
Chris@18 120 return $this->flags;
Chris@18 121 }
Chris@18 122
Chris@18 123 /**
Chris@18 124 * @return int
Chris@18 125 */
Chris@18 126 public function getAliasLength()
Chris@18 127 {
Chris@18 128 return $this->aliasLength;
Chris@18 129 }
Chris@18 130
Chris@18 131 /**
Chris@18 132 * @return string
Chris@18 133 */
Chris@18 134 public function getAlias()
Chris@18 135 {
Chris@18 136 return $this->alias;
Chris@18 137 }
Chris@18 138
Chris@18 139 /**
Chris@18 140 * @return int
Chris@18 141 */
Chris@18 142 public function getMetaDataLength()
Chris@18 143 {
Chris@18 144 return $this->metaDataLength;
Chris@18 145 }
Chris@18 146
Chris@18 147 /**
Chris@18 148 * @return string
Chris@18 149 */
Chris@18 150 public function getMetaData()
Chris@18 151 {
Chris@18 152 return $this->metaData;
Chris@18 153 }
Chris@18 154
Chris@18 155 /**
Chris@18 156 * @return mixed|null
Chris@18 157 */
Chris@18 158 public function deserializeMetaData()
Chris@18 159 {
Chris@18 160 if (empty($this->metaData)) {
Chris@18 161 return null;
Chris@18 162 }
Chris@18 163
Chris@18 164 $result = Unserialize::unserialize($this->metaData, array('allowed_classes' => false));
Chris@18 165
Chris@18 166 $serialized = json_encode($result);
Chris@18 167 if (strpos($serialized, '__PHP_Incomplete_Class_Name') !== false) {
Chris@18 168 throw new DeserializationException(
Chris@18 169 'Meta-data contains serialized object',
Chris@18 170 1539623382
Chris@18 171 );
Chris@18 172 }
Chris@18 173
Chris@18 174 return $result;
Chris@18 175 }
Chris@18 176 }