1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- namespace ParagonIE\ConstantTime;
- /**
- * Copyright (c) 2016 - 2017 Paragon Initiative Enterprises.
- * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
- /**
- * Class Binary
- *
- * Binary string operators that don't choke on
- * mbstring.func_overload
- *
- * @package ParagonIE\ConstantTime
- */
- abstract class Binary
- {
- /**
- * Safe string length
- *
- * @ref mbstring.func_overload
- *
- * @param string $str
- * @return int
- */
- public static function safeStrlen($str)
- {
- if (\function_exists('mb_strlen')) {
- return (int) \mb_strlen($str, '8bit');
- } else {
- return (int) \strlen($str);
- }
- }
- /**
- * Safe substring
- *
- * @ref mbstring.func_overload
- *
- * @staticvar boolean $exists
- * @param string $str
- * @param int $start
- * @param int $length
- * @return string
- * @throws \TypeError
- */
- public static function safeSubstr(
- $str,
- $start = 0,
- $length = \null
- ) {
- if (\function_exists('mb_substr')) {
- // mb_substr($str, 0, null, '8bit') returns an empty string on PHP
- // 5.3, so we have to find the length ourselves.
- if (\is_null($length)) {
- if ($start >= 0) {
- $length = self::safeStrlen($str) - $start;
- } else {
- $length = -$start;
- }
- }
- // $length calculation above might result in a 0-length string
- if ($length === 0) {
- return '';
- }
- return \mb_substr($str, $start, $length, '8bit');
- }
- if ($length === 0) {
- return '';
- }
- // Unlike mb_substr(), substr() doesn't accept null for length
- if (!is_null($length)) {
- return \substr($str, $start, $length);
- } else {
- return \substr($str, $start);
- }
- }
- }
|