PluginProbe
Media Cloud Sync / 1.4.2
Media Cloud Sync v1.4.2
1.4.2 1.4.1 1.4.0 1.3.12 1.3.11 1.3.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.2.0 1.2.10 1.2.11 1.2.12 1.2.13 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 All 36 releases
← All changes | includes/sdk/s3/GuzzleHttp/Psr7/Header.php +76 -25 1.2.0 → 1.4.2 View file →
@@ -1,6 +1,7 @@
1 1 <?php
2 2
3 +declare (strict_types=1);
3 4 namespace Dudlewebs\WPMCS\s3\GuzzleHttp\Psr7;
4 5
5 6 final class Header
6 7 {
@@ -10,30 +11,30 @@
10 11 * of the header. When a parameter does not contain a value, but just
11 12 * contains a key, this function will inject a key with a '' string value.
12 13 *
13 14 * @param string|array $header Header to parse into components.
14 - *
15 - * @return array Returns the parsed header values.
16 15 */
17 - public static function parse($header)
16 + public static function parse($header) : array
18 17 {
19 18 static $trimmed = "\"' \n\t\r";
20 19 $params = $matches = [];
21 - foreach (self::normalize($header) as $val) {
22 - $part = [];
23 - foreach (\preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
24 - if (\preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
25 - $m = $matches[0];
26 - if (isset($m[1])) {
27 - $part[\trim($m[0], $trimmed)] = \trim($m[1], $trimmed);
28 - } else {
29 - $part[] = \trim($m[0], $trimmed);
20 + foreach ((array) $header as $value) {
21 + foreach (self::splitList($value) as $val) {
22 + $part = [];
23 + foreach (\preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) ?: [] as $kvp) {
24 + if (\preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
25 + $m = $matches[0];
26 + if (isset($m[1])) {
27 + $part[\trim($m[0], $trimmed)] = \trim($m[1], $trimmed);
28 + } else {
29 + $part[] = \trim($m[0], $trimmed);
30 + }
30 31 }
31 32 }
33 + if ($part) {
34 + $params[] = $part;
35 + }
32 36 }
33 - if ($part) {
34 - $params[] = $part;
35 - }
36 37 }
37 38 return $params;
38 39 }
39 40 /**
@@ -41,25 +42,75 @@
41 42 * headers into an array of headers with no comma separated values.
42 43 *
43 44 * @param string|array $header Header to normalize.
44 45 *
45 - * @return array Returns the normalized header field values.
46 + * @deprecated Use self::splitList() instead.
46 47 */
47 - public static function normalize($header)
48 + public static function normalize($header) : array
48 49 {
49 - if (!\is_array($header)) {
50 - return \array_map('trim', \explode(',', $header));
50 + $result = [];
51 + foreach ((array) $header as $value) {
52 + foreach (self::splitList($value) as $parsed) {
53 + $result[] = $parsed;
54 + }
51 55 }
56 + return $result;
57 + }
58 + /**
59 + * Splits a HTTP header defined to contain a comma-separated list into
60 + * each individual value. Empty values will be removed.
61 + *
62 + * Example headers include 'accept', 'cache-control' and 'if-none-match'.
63 + *
64 + * This method must not be used to parse headers that are not defined as
65 + * a list, such as 'user-agent' or 'set-cookie'.
66 + *
67 + * @param string|string[] $values Header value as returned by MessageInterface::getHeader()
68 + *
69 + * @return string[]
70 + */
71 + public static function splitList($values) : array
72 + {
73 + if (!\is_array($values)) {
74 + $values = [$values];
75 + }
52 76 $result = [];
53 - foreach ($header as $value) {
54 - foreach ((array) $value as $v) {
55 - if (\strpos($v, ',') === \false) {
56 - $result[] = $v;
77 + foreach ($values as $value) {
78 + if (!\is_string($value)) {
79 + throw new \TypeError('$header must either be a string or an array containing strings.');
80 + }
81 + $v = '';
82 + $isQuoted = \false;
83 + $isEscaped = \false;
84 + for ($i = 0, $max = \strlen($value); $i < $max; ++$i) {
85 + if ($isEscaped) {
86 + $v .= $value[$i];
87 + $isEscaped = \false;
57 88 continue;
58 89 }
59 - foreach (\preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) {
60 - $result[] = \trim($vv);
90 + if (!$isQuoted && $value[$i] === ',') {
91 + $v = \trim($v);
92 + if ($v !== '') {
93 + $result[] = $v;
94 + }
95 + $v = '';
96 + continue;
61 97 }
98 + if ($isQuoted && $value[$i] === '\\') {
99 + $isEscaped = \true;
100 + $v .= $value[$i];
101 + continue;
102 + }
103 + if ($value[$i] === '"') {
104 + $isQuoted = !$isQuoted;
105 + $v .= $value[$i];
106 + continue;
107 + }
108 + $v .= $value[$i];
109 + }
110 + $v = \trim($v);
111 + if ($v !== '') {
112 + $result[] = $v;
62 113 }
63 114 }
64 115 return $result;
65 116 }