Conditions | 6 |
Paths | 14 |
Total Lines | 37 |
Code Lines | 23 |
Lines | 0 |
Ratio | 0 % |
Tests | 24 |
CRAP Score | 6 |
Changes | 0 |
1 | <?php |
||
65 | 30 | public static function decodeName(string $string, int &$offset = 0): string |
|
66 | { |
||
67 | 30 | $len = ord($string[$offset]); |
|
68 | 30 | ++$offset; |
|
69 | |||
70 | 30 | $isCompressed = (bool) (0b11000000 & $len); |
|
71 | 30 | $_offset = 0; |
|
72 | |||
73 | 30 | if ($isCompressed) { |
|
74 | 7 | $_offset = $offset + 1; |
|
75 | 7 | $offset = (0b00111111 & $len) * 256 + ord($string[$offset]); |
|
76 | 7 | $len = ord($string[$offset]); |
|
77 | 7 | ++$offset; |
|
78 | } |
||
79 | |||
80 | 30 | if (0 === $len) { |
|
81 | 3 | return '.'; |
|
82 | } |
||
83 | |||
84 | 27 | $name = ''; |
|
85 | 27 | while (0 !== $len) { |
|
86 | 27 | $name .= substr($string, $offset, $len).'.'; |
|
87 | 27 | $offset += $len; |
|
88 | 27 | $len = ord($string[$offset]); |
|
89 | 27 | if ($len & 0b11000000) { |
|
90 | 7 | $name .= self::decodeName($string, $offset); |
|
91 | 7 | break; |
|
92 | } |
||
93 | |||
94 | 27 | ++$offset; |
|
95 | } |
||
96 | |||
97 | 27 | if ($isCompressed) { |
|
98 | 7 | $offset = $_offset; |
|
99 | } |
||
100 | |||
101 | 27 | return $name; |
|
102 | } |
||
104 |