Passed
Pull Request — release-2.1 (#6193)
by Peter
04:42
created
Sources/Class-Package.php 1 patch
Braces   +9 added lines, -7 removed lines patch added patch discarded remove patch
@@ -881,7 +881,6 @@  discard block
 block discarded – undo
881 881
 				$is_writable = true;
882 882
 				break;
883 883
 			}
884
-
885 884
 			else
886 885
 			{
887 886
 				// Convert the chmod value from octal (0777) to text ("777").
@@ -935,8 +934,9 @@  discard block
 block discarded – undo
935 934
 	{
936 935
 		// Wait for a response that isn't continued with -, but don't wait too long.
937 936
 		$time = time();
938
-		do
939
-			$this->last_message = fgets($this->connection, 1024);
937
+		do {
938
+					$this->last_message = fgets($this->connection, 1024);
939
+		}
940 940
 		while ((strlen($this->last_message) < 4 || strpos($this->last_message, ' ') === 0 || strpos($this->last_message, ' ', 3) !== 3) && time() - $time < 5);
941 941
 
942 942
 		// Was the desired response returned?
@@ -957,8 +957,9 @@  discard block
 block discarded – undo
957 957
 		// Request a passive connection - this means, we'll talk to you, you don't talk to us.
958 958
 		@fwrite($this->connection, 'PASV' . "\r\n");
959 959
 		$time = time();
960
-		do
961
-			$response = fgets($this->connection, 1024);
960
+		do {
961
+					$response = fgets($this->connection, 1024);
962
+		}
962 963
 		while (strpos($response, ' ', 3) !== 3 && time() - $time < 5);
963 964
 
964 965
 		// If it's not 227, we weren't given an IP and port, which means it failed.
@@ -1080,8 +1081,9 @@  discard block
 block discarded – undo
1080 1081
 
1081 1082
 		@fwrite($this->connection, 'PWD' . "\r\n");
1082 1083
 		$time = time();
1083
-		do
1084
-			$response = fgets($this->connection, 1024);
1084
+		do {
1085
+					$response = fgets($this->connection, 1024);
1086
+		}
1085 1087
 		while ($response[3] != ' ' && time() - $time < 5);
1086 1088
 
1087 1089
 		// Check for 257!
Please login to merge, or discard this patch.
Sources/Subs-Db-postgresql.php 3 patches
Upper-Lower-Casing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -722,12 +722,12 @@
 block discarded – undo
722 722
 		$where = '';
723 723
 		$count_pk = 0;
724 724
 
725
-		If ($replace_support)
725
+		if ($replace_support)
726 726
 		{
727 727
 			foreach ($columns as $columnName => $type)
728 728
 			{
729 729
 				//check pk fiel
730
-				IF (in_array($columnName, $keys))
730
+				if (in_array($columnName, $keys))
731 731
 				{
732 732
 					$key_str .= ($count_pk > 0 ? ',' : '');
733 733
 					$key_str .= $columnName;
Please login to merge, or discard this patch.
Braces   +4 added lines, -2 removed lines patch added patch discarded remove patch
@@ -979,7 +979,8 @@  discard block
 block discarded – undo
979 979
 		$error_array[2] = null;
980 980
 
981 981
 	if(empty($db_persist))
982
-	{ // without pooling
982
+	{
983
+// without pooling
983 984
 		if (empty($pg_error_data_prep))
984 985
 			$pg_error_data_prep = pg_prepare($db_connection, 'smf_log_errors',
985 986
 				'INSERT INTO ' . $db_prefix . 'log_errors
@@ -990,7 +991,8 @@  discard block
 block discarded – undo
990 991
 		pg_execute($db_connection, 'smf_log_errors', $error_array);
991 992
 	}
992 993
 	else
993
-	{ //with pooling
994
+	{
995
+//with pooling
994 996
 		$pg_error_data_prep = pg_prepare($db_connection, '',
995 997
 			'INSERT INTO ' . $db_prefix . 'log_errors
996 998
 				(id_member, log_time, ip, url, message, session, error_type, file, line, backtrace)
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -73,7 +73,7 @@  discard block
 block discarded – undo
73 73
 		display_db_error();
74 74
 
75 75
 	// We need to escape ' and \
76
-	$db_passwd = str_replace(array('\\','\''), array('\\\\','\\\''), $db_passwd);
76
+	$db_passwd = str_replace(array('\\', '\''), array('\\\\', '\\\''), $db_passwd);
77 77
 
78 78
 	if (!empty($db_options['persist']))
79 79
 		$connection = @pg_pconnect((empty($db_server) ? '' : 'host=' . $db_server . ' ') . 'dbname=' . $db_name . ' user=\'' . $db_user . '\' password=\'' . $db_passwd . '\'' . (empty($db_options['port']) ? '' : ' port=\'' . $db_options['port'] . '\''));
@@ -925,7 +925,7 @@  discard block
 block discarded – undo
925 925
 	if (filter_var($error_array[2], FILTER_VALIDATE_IP) === false)
926 926
 		$error_array[2] = null;
927 927
 
928
-	if(empty($db_persist))
928
+	if (empty($db_persist))
929 929
 	{ // without pooling
930 930
 		if (empty($pg_error_data_prep))
931 931
 			$pg_error_data_prep = pg_prepare($db_connection, 'smf_log_errors',
Please login to merge, or discard this patch.
Sources/Recent.php 2 patches
Braces   -1 removed lines patch added patch discarded remove patch
@@ -1252,7 +1252,6 @@
 block discarded – undo
1252 1252
 			if (!empty($modSettings['enableAllMessages']) && $topic_length < $modSettings['enableAllMessages'])
1253 1253
 				$pages .= ' &nbsp;<a href="' . $scripturl . '?topic=' . $row['id_topic'] . '.0;all">' . $txt['all'] . '</a>';
1254 1254
 		}
1255
-
1256 1255
 		else
1257 1256
 			$pages = '';
1258 1257
 
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -467,20 +467,20 @@
 block discarded – undo
467 467
 		$context['posts'][$key]['quickbuttons'] = array(
468 468
 			'reply' => array(
469 469
 				'label' => $txt['reply'],
470
-				'href' => $scripturl.'?action=post;topic='.$post['topic'].'.'.$post['start'],
470
+				'href' => $scripturl . '?action=post;topic=' . $post['topic'] . '.' . $post['start'],
471 471
 				'icon' => 'reply_button',
472 472
 				'show' => $post['can_reply']
473 473
 			),
474 474
 			'quote' => array(
475 475
 				'label' => $txt['quote_action'],
476
-				'href' => $scripturl.'?action=post;topic='.$post['topic'].'.'.$post['start'].';quote='.$post['id'],
476
+				'href' => $scripturl . '?action=post;topic=' . $post['topic'] . '.' . $post['start'] . ';quote=' . $post['id'],
477 477
 				'icon' => 'quote',
478 478
 				'show' => $post['can_quote']
479 479
 			),
480 480
 			'delete' => array(
481 481
 				'label' => $txt['remove'],
482
-				'href' => $scripturl.'?action=deletemsg;msg='.$post['id'].';topic='.$post['topic'].';recent;'.$context['session_var'].'='.$context['session_id'],
483
-				'javascript' => 'data-confirm="'.$txt['remove_message'].'"',
482
+				'href' => $scripturl . '?action=deletemsg;msg=' . $post['id'] . ';topic=' . $post['topic'] . ';recent;' . $context['session_var'] . '=' . $context['session_id'],
483
+				'javascript' => 'data-confirm="' . $txt['remove_message'] . '"',
484 484
 				'class' => 'you_sure',
485 485
 				'icon' => 'remove_button',
486 486
 				'show' => $post['can_delete']
Please login to merge, or discard this patch.
Sources/ManageMaintenance.php 1 patch
Braces   -1 removed lines patch added patch discarded remove patch
@@ -2291,7 +2291,6 @@
 block discarded – undo
2291 2291
 		list ($hookData['class'], $hookData['method']) = explode('::', $modFunc);
2292 2292
 		$hookData['pureFunc'] = $hookData['method'];
2293 2293
 	}
2294
-
2295 2294
 	else
2296 2295
 		$hookData['pureFunc'] = $modFunc;
2297 2296
 
Please login to merge, or discard this patch.
Sources/PersonalMessage.php 1 patch
Upper-Lower-Casing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -3219,7 +3219,7 @@  discard block
 block discarded – undo
3219 3219
 		// Deleting an existing label?
3220 3220
 		elseif (isset($_POST['delete'], $_POST['delete_label']))
3221 3221
 		{
3222
-			foreach ($_POST['delete_label'] AS $label => $dummy)
3222
+			foreach ($_POST['delete_label'] as $label => $dummy)
3223 3223
 			{
3224 3224
 				unset($the_labels[$label]);
3225 3225
 				$labels_to_remove[] = $label;
@@ -3260,7 +3260,7 @@  discard block
 block discarded – undo
3260 3260
 		if (!empty($labels_to_add))
3261 3261
 		{
3262 3262
 			$inserts = array();
3263
-			foreach ($labels_to_add AS $label)
3263
+			foreach ($labels_to_add as $label)
3264 3264
 				$inserts[] = array($user_info['id'], $label);
3265 3265
 
3266 3266
 			$smcFunc['db_insert']('', '{db_prefix}pm_labels', array('id_member' => 'int', 'name' => 'string-30'), $inserts, array());
@@ -3269,7 +3269,7 @@  discard block
 block discarded – undo
3269 3269
 		// Update existing labels as needed
3270 3270
 		if (!empty($label_upates))
3271 3271
 		{
3272
-			foreach ($label_updates AS $id => $name)
3272
+			foreach ($label_updates as $id => $name)
3273 3273
 			{
3274 3274
 				$smcFunc['db_query']('', '
3275 3275
 					UPDATE {db_prefix}labels
Please login to merge, or discard this patch.
Sources/Register.php 1 patch
Braces   -1 removed lines patch added patch discarded remove patch
@@ -849,7 +849,6 @@
 block discarded – undo
849 849
 			die("\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3B");
850 850
 		}
851 851
 	}
852
-
853 852
 	elseif ($_REQUEST['format'] === '.wav')
854 853
 	{
855 854
 		require_once($sourcedir . '/Subs-Sound.php');
Please login to merge, or discard this patch.
Sources/Subs-Membergroups.php 1 patch
Braces   -1 removed lines patch added patch discarded remove patch
@@ -756,7 +756,6 @@
 block discarded – undo
756 756
 				$groups[$row['id_group']]['num_members'] += $row['num_members'];
757 757
 			$smcFunc['db_free_result']($query);
758 758
 		}
759
-
760 759
 		else
761 760
 		{
762 761
 			$query = $smcFunc['db_query']('', '
Please login to merge, or discard this patch.
Themes/default/Calendar.template.php 1 patch
Braces   +4 added lines, -2 removed lines patch added patch discarded remove patch
@@ -425,7 +425,8 @@  discard block
 block discarded – undo
425 425
 					if (!empty($day['events']))
426 426
 					{
427 427
 						// Sort events by start time (all day events will be listed first)
428
-						uasort($day['events'], function($a, $b) {
428
+						uasort($day['events'], function($a, $b)
429
+						{
429 430
 							if ($a['start_timestamp'] == $b['start_timestamp'])
430 431
 								return 0;
431 432
 
@@ -619,7 +620,8 @@  discard block
 block discarded – undo
619 620
 			if (!empty($day['events']))
620 621
 			{
621 622
 				// Sort events by start time (all day events will be listed first)
622
-				uasort($day['events'], function($a, $b) {
623
+				uasort($day['events'], function($a, $b)
624
+				{
623 625
 					if ($a['start_timestamp'] == $b['start_timestamp'])
624 626
 						return 0;
625 627
 					return ($a['start_timestamp'] < $b['start_timestamp']) ? -1 : 1;
Please login to merge, or discard this patch.
Sources/random_compat/random_int.php 2 patches
Indentation   +200 added lines, -200 removed lines patch added patch discarded remove patch
@@ -1,204 +1,204 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if (!is_callable('random_int')) {
4
-    /**
5
-     * Random_* Compatibility Library
6
-     * for using the new PHP 7 random_* API in PHP 5 projects
7
-     *
8
-     * The MIT License (MIT)
9
-     *
10
-     * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
11
-     *
12
-     * Permission is hereby granted, free of charge, to any person obtaining a copy
13
-     * of this software and associated documentation files (the "Software"), to deal
14
-     * in the Software without restriction, including without limitation the rights
15
-     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
-     * copies of the Software, and to permit persons to whom the Software is
17
-     * furnished to do so, subject to the following conditions:
18
-     *
19
-     * The above copyright notice and this permission notice shall be included in
20
-     * all copies or substantial portions of the Software.
21
-     *
22
-     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
-     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
-     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
-     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
-     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
-     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
-     * SOFTWARE.
29
-     */
30
-
31
-    /**
32
-     * Fetch a random integer between $min and $max inclusive
33
-     *
34
-     * @param int $min
35
-     * @param int $max
36
-     *
37
-     * @throws Exception
38
-     *
39
-     * @return int
40
-     */
41
-    function random_int($min, $max)
42
-    {
43
-        /**
44
-         * Type and input logic checks
45
-         *
46
-         * If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
47
-         * (non-inclusive), it will sanely cast it to an int. If you it's equal to
48
-         * ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats
49
-         * lose precision, so the <= and => operators might accidentally let a float
50
-         * through.
51
-         */
52
-
53
-        try {
54
-            /** @var int $min */
55
-            $min = RandomCompat_intval($min);
56
-        } catch (TypeError $ex) {
57
-            throw new TypeError(
58
-                'random_int(): $min must be an integer'
59
-            );
60
-        }
61
-
62
-        try {
63
-            /** @var int $max */
64
-            $max = RandomCompat_intval($max);
65
-        } catch (TypeError $ex) {
66
-            throw new TypeError(
67
-                'random_int(): $max must be an integer'
68
-            );
69
-        }
70
-
71
-        /**
72
-         * Now that we've verified our weak typing system has given us an integer,
73
-         * let's validate the logic then we can move forward with generating random
74
-         * integers along a given range.
75
-         */
76
-        if ($min > $max) {
77
-            throw new Error(
78
-                'Minimum value must be less than or equal to the maximum value'
79
-            );
80
-        }
81
-
82
-        if ($max === $min) {
83
-            return (int) $min;
84
-        }
85
-
86
-        /**
87
-         * Initialize variables to 0
88
-         *
89
-         * We want to store:
90
-         * $bytes => the number of random bytes we need
91
-         * $mask => an integer bitmask (for use with the &) operator
92
-         *          so we can minimize the number of discards
93
-         */
94
-        $attempts = $bits = $bytes = $mask = $valueShift = 0;
95
-        /** @var int $attempts */
96
-        /** @var int $bits */
97
-        /** @var int $bytes */
98
-        /** @var int $mask */
99
-        /** @var int $valueShift */
100
-
101
-        /**
102
-         * At this point, $range is a positive number greater than 0. It might
103
-         * overflow, however, if $max - $min > PHP_INT_MAX. PHP will cast it to
104
-         * a float and we will lose some precision.
105
-         *
106
-         * @var int|float $range
107
-         */
108
-        $range = $max - $min;
109
-
110
-        /**
111
-         * Test for integer overflow:
112
-         */
113
-        if (!is_int($range)) {
114
-
115
-            /**
116
-             * Still safely calculate wider ranges.
117
-             * Provided by @CodesInChaos, @oittaa
118
-             *
119
-             * @ref https://gist.github.com/CodesInChaos/03f9ea0b58e8b2b8d435
120
-             *
121
-             * We use ~0 as a mask in this case because it generates all 1s
122
-             *
123
-             * @ref https://eval.in/400356 (32-bit)
124
-             * @ref http://3v4l.org/XX9r5  (64-bit)
125
-             */
126
-            $bytes = PHP_INT_SIZE;
127
-            /** @var int $mask */
128
-            $mask = ~0;
129
-
130
-        } else {
131
-
132
-            /**
133
-             * $bits is effectively ceil(log($range, 2)) without dealing with
134
-             * type juggling
135
-             */
136
-            while ($range > 0) {
137
-                if ($bits % 8 === 0) {
138
-                    ++$bytes;
139
-                }
140
-                ++$bits;
141
-                $range >>= 1;
142
-                /** @var int $mask */
143
-                $mask = $mask << 1 | 1;
144
-            }
145
-            $valueShift = $min;
146
-        }
147
-
148
-        /** @var int $val */
149
-        $val = 0;
150
-        /**
151
-         * Now that we have our parameters set up, let's begin generating
152
-         * random integers until one falls between $min and $max
153
-         */
154
-        /** @psalm-suppress RedundantCondition */
155
-        do {
156
-            /**
157
-             * The rejection probability is at most 0.5, so this corresponds
158
-             * to a failure probability of 2^-128 for a working RNG
159
-             */
160
-            if ($attempts > 128) {
161
-                throw new Exception(
162
-                    'random_int: RNG is broken - too many rejections'
163
-                );
164
-            }
165
-
166
-            /**
167
-             * Let's grab the necessary number of random bytes
168
-             */
169
-            $randomByteString = random_bytes($bytes);
170
-
171
-            /**
172
-             * Let's turn $randomByteString into an integer
173
-             *
174
-             * This uses bitwise operators (<< and |) to build an integer
175
-             * out of the values extracted from ord()
176
-             *
177
-             * Example: [9F] | [6D] | [32] | [0C] =>
178
-             *   159 + 27904 + 3276800 + 201326592 =>
179
-             *   204631455
180
-             */
181
-            $val &= 0;
182
-            for ($i = 0; $i < $bytes; ++$i) {
183
-                $val |= ord($randomByteString[$i]) << ($i * 8);
184
-            }
185
-            /** @var int $val */
186
-
187
-            /**
188
-             * Apply mask
189
-             */
190
-            $val &= $mask;
191
-            $val += $valueShift;
192
-
193
-            ++$attempts;
194
-            /**
195
-             * If $val overflows to a floating point number,
196
-             * ... or is larger than $max,
197
-             * ... or smaller than $min,
198
-             * then try again.
199
-             */
200
-        } while (!is_int($val) || $val > $max || $val < $min);
201
-
202
-        return (int) $val;
203
-    }
4
+	/**
5
+	 * Random_* Compatibility Library
6
+	 * for using the new PHP 7 random_* API in PHP 5 projects
7
+	 *
8
+	 * The MIT License (MIT)
9
+	 *
10
+	 * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
11
+	 *
12
+	 * Permission is hereby granted, free of charge, to any person obtaining a copy
13
+	 * of this software and associated documentation files (the "Software"), to deal
14
+	 * in the Software without restriction, including without limitation the rights
15
+	 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+	 * copies of the Software, and to permit persons to whom the Software is
17
+	 * furnished to do so, subject to the following conditions:
18
+	 *
19
+	 * The above copyright notice and this permission notice shall be included in
20
+	 * all copies or substantial portions of the Software.
21
+	 *
22
+	 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+	 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+	 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+	 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+	 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+	 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+	 * SOFTWARE.
29
+	 */
30
+
31
+	/**
32
+	 * Fetch a random integer between $min and $max inclusive
33
+	 *
34
+	 * @param int $min
35
+	 * @param int $max
36
+	 *
37
+	 * @throws Exception
38
+	 *
39
+	 * @return int
40
+	 */
41
+	function random_int($min, $max)
42
+	{
43
+		/**
44
+		 * Type and input logic checks
45
+		 *
46
+		 * If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
47
+		 * (non-inclusive), it will sanely cast it to an int. If you it's equal to
48
+		 * ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats
49
+		 * lose precision, so the <= and => operators might accidentally let a float
50
+		 * through.
51
+		 */
52
+
53
+		try {
54
+			/** @var int $min */
55
+			$min = RandomCompat_intval($min);
56
+		} catch (TypeError $ex) {
57
+			throw new TypeError(
58
+				'random_int(): $min must be an integer'
59
+			);
60
+		}
61
+
62
+		try {
63
+			/** @var int $max */
64
+			$max = RandomCompat_intval($max);
65
+		} catch (TypeError $ex) {
66
+			throw new TypeError(
67
+				'random_int(): $max must be an integer'
68
+			);
69
+		}
70
+
71
+		/**
72
+		 * Now that we've verified our weak typing system has given us an integer,
73
+		 * let's validate the logic then we can move forward with generating random
74
+		 * integers along a given range.
75
+		 */
76
+		if ($min > $max) {
77
+			throw new Error(
78
+				'Minimum value must be less than or equal to the maximum value'
79
+			);
80
+		}
81
+
82
+		if ($max === $min) {
83
+			return (int) $min;
84
+		}
85
+
86
+		/**
87
+		 * Initialize variables to 0
88
+		 *
89
+		 * We want to store:
90
+		 * $bytes => the number of random bytes we need
91
+		 * $mask => an integer bitmask (for use with the &) operator
92
+		 *          so we can minimize the number of discards
93
+		 */
94
+		$attempts = $bits = $bytes = $mask = $valueShift = 0;
95
+		/** @var int $attempts */
96
+		/** @var int $bits */
97
+		/** @var int $bytes */
98
+		/** @var int $mask */
99
+		/** @var int $valueShift */
100
+
101
+		/**
102
+		 * At this point, $range is a positive number greater than 0. It might
103
+		 * overflow, however, if $max - $min > PHP_INT_MAX. PHP will cast it to
104
+		 * a float and we will lose some precision.
105
+		 *
106
+		 * @var int|float $range
107
+		 */
108
+		$range = $max - $min;
109
+
110
+		/**
111
+		 * Test for integer overflow:
112
+		 */
113
+		if (!is_int($range)) {
114
+
115
+			/**
116
+			 * Still safely calculate wider ranges.
117
+			 * Provided by @CodesInChaos, @oittaa
118
+			 *
119
+			 * @ref https://gist.github.com/CodesInChaos/03f9ea0b58e8b2b8d435
120
+			 *
121
+			 * We use ~0 as a mask in this case because it generates all 1s
122
+			 *
123
+			 * @ref https://eval.in/400356 (32-bit)
124
+			 * @ref http://3v4l.org/XX9r5  (64-bit)
125
+			 */
126
+			$bytes = PHP_INT_SIZE;
127
+			/** @var int $mask */
128
+			$mask = ~0;
129
+
130
+		} else {
131
+
132
+			/**
133
+			 * $bits is effectively ceil(log($range, 2)) without dealing with
134
+			 * type juggling
135
+			 */
136
+			while ($range > 0) {
137
+				if ($bits % 8 === 0) {
138
+					++$bytes;
139
+				}
140
+				++$bits;
141
+				$range >>= 1;
142
+				/** @var int $mask */
143
+				$mask = $mask << 1 | 1;
144
+			}
145
+			$valueShift = $min;
146
+		}
147
+
148
+		/** @var int $val */
149
+		$val = 0;
150
+		/**
151
+		 * Now that we have our parameters set up, let's begin generating
152
+		 * random integers until one falls between $min and $max
153
+		 */
154
+		/** @psalm-suppress RedundantCondition */
155
+		do {
156
+			/**
157
+			 * The rejection probability is at most 0.5, so this corresponds
158
+			 * to a failure probability of 2^-128 for a working RNG
159
+			 */
160
+			if ($attempts > 128) {
161
+				throw new Exception(
162
+					'random_int: RNG is broken - too many rejections'
163
+				);
164
+			}
165
+
166
+			/**
167
+			 * Let's grab the necessary number of random bytes
168
+			 */
169
+			$randomByteString = random_bytes($bytes);
170
+
171
+			/**
172
+			 * Let's turn $randomByteString into an integer
173
+			 *
174
+			 * This uses bitwise operators (<< and |) to build an integer
175
+			 * out of the values extracted from ord()
176
+			 *
177
+			 * Example: [9F] | [6D] | [32] | [0C] =>
178
+			 *   159 + 27904 + 3276800 + 201326592 =>
179
+			 *   204631455
180
+			 */
181
+			$val &= 0;
182
+			for ($i = 0; $i < $bytes; ++$i) {
183
+				$val |= ord($randomByteString[$i]) << ($i * 8);
184
+			}
185
+			/** @var int $val */
186
+
187
+			/**
188
+			 * Apply mask
189
+			 */
190
+			$val &= $mask;
191
+			$val += $valueShift;
192
+
193
+			++$attempts;
194
+			/**
195
+			 * If $val overflows to a floating point number,
196
+			 * ... or is larger than $max,
197
+			 * ... or smaller than $min,
198
+			 * then try again.
199
+			 */
200
+		} while (!is_int($val) || $val > $max || $val < $min);
201
+
202
+		return (int) $val;
203
+	}
204 204
 }
Please login to merge, or discard this patch.
Braces   +29 added lines, -13 removed lines patch added patch discarded remove patch
@@ -1,6 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3
-if (!is_callable('random_int')) {
3
+if (!is_callable('random_int'))
4
+{
4 5
     /**
5 6
      * Random_* Compatibility Library
6 7
      * for using the new PHP 7 random_* API in PHP 5 projects
@@ -50,19 +51,25 @@  discard block
 block discarded – undo
50 51
          * through.
51 52
          */
52 53
 
53
-        try {
54
+        try
55
+        {
54 56
             /** @var int $min */
55 57
             $min = RandomCompat_intval($min);
56
-        } catch (TypeError $ex) {
58
+        }
59
+        catch (TypeError $ex)
60
+        {
57 61
             throw new TypeError(
58 62
                 'random_int(): $min must be an integer'
59 63
             );
60 64
         }
61 65
 
62
-        try {
66
+        try
67
+        {
63 68
             /** @var int $max */
64 69
             $max = RandomCompat_intval($max);
65
-        } catch (TypeError $ex) {
70
+        }
71
+        catch (TypeError $ex)
72
+        {
66 73
             throw new TypeError(
67 74
                 'random_int(): $max must be an integer'
68 75
             );
@@ -73,13 +80,15 @@  discard block
 block discarded – undo
73 80
          * let's validate the logic then we can move forward with generating random
74 81
          * integers along a given range.
75 82
          */
76
-        if ($min > $max) {
83
+        if ($min > $max)
84
+        {
77 85
             throw new Error(
78 86
                 'Minimum value must be less than or equal to the maximum value'
79 87
             );
80 88
         }
81 89
 
82
-        if ($max === $min) {
90
+        if ($max === $min)
91
+        {
83 92
             return (int) $min;
84 93
         }
85 94
 
@@ -110,7 +119,8 @@  discard block
 block discarded – undo
110 119
         /**
111 120
          * Test for integer overflow:
112 121
          */
113
-        if (!is_int($range)) {
122
+        if (!is_int($range))
123
+        {
114 124
 
115 125
             /**
116 126
              * Still safely calculate wider ranges.
@@ -127,14 +137,18 @@  discard block
 block discarded – undo
127 137
             /** @var int $mask */
128 138
             $mask = ~0;
129 139
 
130
-        } else {
140
+        }
141
+        else
142
+        {
131 143
 
132 144
             /**
133 145
              * $bits is effectively ceil(log($range, 2)) without dealing with
134 146
              * type juggling
135 147
              */
136
-            while ($range > 0) {
137
-                if ($bits % 8 === 0) {
148
+            while ($range > 0)
149
+            {
150
+                if ($bits % 8 === 0)
151
+                {
138 152
                     ++$bytes;
139 153
                 }
140 154
                 ++$bits;
@@ -157,7 +171,8 @@  discard block
 block discarded – undo
157 171
              * The rejection probability is at most 0.5, so this corresponds
158 172
              * to a failure probability of 2^-128 for a working RNG
159 173
              */
160
-            if ($attempts > 128) {
174
+            if ($attempts > 128)
175
+            {
161 176
                 throw new Exception(
162 177
                     'random_int: RNG is broken - too many rejections'
163 178
                 );
@@ -179,7 +194,8 @@  discard block
 block discarded – undo
179 194
              *   204631455
180 195
              */
181 196
             $val &= 0;
182
-            for ($i = 0; $i < $bytes; ++$i) {
197
+            for ($i = 0; $i < $bytes; ++$i)
198
+            {
183 199
                 $val |= ord($randomByteString[$i]) << ($i * 8);
184 200
             }
185 201
             /** @var int $val */
Please login to merge, or discard this patch.