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