Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
namespace ParagonIE\ConstantTime;
3
 
4
/**
5
 *  Copyright (c) 2016 - 2017 Paragon Initiative Enterprises.
6
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
7
 *
8
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
9
 *  of this software and associated documentation files (the "Software"), to deal
10
 *  in the Software without restriction, including without limitation the rights
11
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
 *  copies of the Software, and to permit persons to whom the Software is
13
 *  furnished to do so, subject to the following conditions:
14
 *
15
 *  The above copyright notice and this permission notice shall be included in all
16
 *  copies or substantial portions of the Software.
17
 *
18
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
 *  SOFTWARE.
25
 */
26
 
27
/**
28
 * Class Binary
29
 *
30
 * Binary string operators that don't choke on
31
 * mbstring.func_overload
32
 *
33
 * @package ParagonIE\ConstantTime
34
 */
35
abstract class Binary
36
{
37
    /**
38
     * Safe string length
39
     *
40
     * @ref mbstring.func_overload
41
     *
42
     * @param string $str
43
     * @return int
44
     */
45
    public static function safeStrlen($str)
46
    {
47
        if (\function_exists('mb_strlen')) {
48
            return (int) \mb_strlen($str, '8bit');
49
        } else {
50
            return (int) \strlen($str);
51
        }
52
    }
53
 
54
    /**
55
     * Safe substring
56
     *
57
     * @ref mbstring.func_overload
58
     *
59
     * @staticvar boolean $exists
60
     * @param string $str
61
     * @param int $start
62
     * @param int $length
63
     * @return string
64
     * @throws \TypeError
65
     */
66
    public static function safeSubstr(
67
        $str,
68
        $start = 0,
69
        $length = \null
70
    ) {
71
        if (\function_exists('mb_substr')) {
72
            // mb_substr($str, 0, null, '8bit') returns an empty string on PHP
73
            // 5.3, so we have to find the length ourselves.
74
            if (\is_null($length)) {
75
                if ($start >= 0) {
76
                    $length = self::safeStrlen($str) - $start;
77
                } else {
78
                    $length = -$start;
79
                }
80
            }
81
            // $length calculation above might result in a 0-length string
82
            if ($length === 0) {
83
                return '';
84
            }
85
            return \mb_substr($str, $start, $length, '8bit');
86
        }
87
        if ($length === 0) {
88
            return '';
89
        }
90
        // Unlike mb_substr(), substr() doesn't accept null for length
91
        if (!is_null($length)) {
92
            return \substr($str, $start, $length);
93
        } else {
94
            return \substr($str, $start);
95
        }
96
    }
97
}