@@ -88,19 +88,16 @@ static inline uint32_t rand_range32(const php_random_algo *algo, php_random_stat
88
88
size_t total_size = 0 ;
89
89
uint32_t count = 0 ;
90
90
91
- result = algo -> generate (status );
92
- total_size = status -> last_generated_size ;
93
- if (status -> last_unsafe ) {
94
- return 0 ;
95
- }
96
- if (total_size < sizeof (uint32_t )) {
91
+ result = 0 ;
92
+ total_size = 0 ;
93
+ do {
97
94
r = algo -> generate (status );
98
- result = (result << status -> last_generated_size ) | r ;
95
+ result = (result << ( 8 * status -> last_generated_size ) ) | r ;
99
96
total_size += status -> last_generated_size ;
100
97
if (status -> last_unsafe ) {
101
98
return 0 ;
102
99
}
103
- }
100
+ } while ( total_size < sizeof ( uint32_t ));
104
101
105
102
/* Special case where no modulus is required */
106
103
if (UNEXPECTED (umax == UINT32_MAX )) {
@@ -126,19 +123,16 @@ static inline uint32_t rand_range32(const php_random_algo *algo, php_random_stat
126
123
return 0 ;
127
124
}
128
125
129
- result = algo -> generate (status );
130
- total_size = status -> last_generated_size ;
131
- if (status -> last_unsafe ) {
132
- return 0 ;
133
- }
134
- while (total_size < sizeof (uint32_t )) {
126
+ result = 0 ;
127
+ total_size = 0 ;
128
+ do {
135
129
r = algo -> generate (status );
136
- result = (result << status -> last_generated_size ) | r ;
130
+ result = (result << ( 8 * status -> last_generated_size ) ) | r ;
137
131
total_size += status -> last_generated_size ;
138
132
if (status -> last_unsafe ) {
139
133
return 0 ;
140
134
}
141
- }
135
+ } while ( total_size < sizeof ( uint32_t ));
142
136
}
143
137
144
138
return result % umax ;
@@ -150,19 +144,16 @@ static inline uint64_t rand_range64(const php_random_algo *algo, php_random_stat
150
144
size_t total_size = 0 ;
151
145
uint32_t count = 0 ;
152
146
153
- result = algo -> generate (status );
154
- total_size = status -> last_generated_size ;
155
- if (status -> last_unsafe ) {
156
- return 0 ;
157
- }
158
- if (total_size < sizeof (uint64_t )) {
147
+ result = 0 ;
148
+ total_size = 0 ;
149
+ do {
159
150
r = algo -> generate (status );
160
- result = (result << status -> last_generated_size ) | r ;
151
+ result = (result << ( 8 * status -> last_generated_size ) ) | r ;
161
152
total_size += status -> last_generated_size ;
162
153
if (status -> last_unsafe ) {
163
154
return 0 ;
164
155
}
165
- }
156
+ } while ( total_size < sizeof ( uint64_t ));
166
157
167
158
/* Special case where no modulus is required */
168
159
if (UNEXPECTED (umax == UINT64_MAX )) {
@@ -188,19 +179,16 @@ static inline uint64_t rand_range64(const php_random_algo *algo, php_random_stat
188
179
return 0 ;
189
180
}
190
181
191
- result = algo -> generate (status );
192
- total_size = status -> last_generated_size ;
193
- if (status -> last_unsafe ) {
194
- return 0 ;
195
- }
196
- while (total_size < sizeof (uint64_t )) {
182
+ result = 0 ;
183
+ total_size = 0 ;
184
+ do {
197
185
r = algo -> generate (status );
198
- result = (result << status -> last_generated_size ) | r ;
186
+ result = (result << ( 8 * status -> last_generated_size ) ) | r ;
199
187
total_size += status -> last_generated_size ;
200
188
if (status -> last_unsafe ) {
201
189
return 0 ;
202
190
}
203
- }
191
+ } while ( total_size < sizeof ( uint64_t ));
204
192
}
205
193
206
194
return result % umax ;
0 commit comments