/* simulate network blocking/partial writes */
if(ctx->wblock_percent > 0) {
unsigned char c = 0;
- Curl_rand(data, &c, 1);
+ Curl_rand_bytes(data, FALSE, &c, 1);
if(c >= ((100-ctx->wblock_percent)*256/100)) {
CURL_TRC_CF(data, cf, "send(len=%zu) SIMULATE EWOULDBLOCK", orig_len);
*err = CURLE_AGAIN;
}
#endif
-static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
+static CURLcode randit(struct Curl_easy *data, unsigned int *rnd,
+ bool env_override)
{
CURLcode result = CURLE_OK;
static unsigned int randseed;
static bool seeded = FALSE;
#ifdef DEBUGBUILD
- char *force_entropy = getenv("CURL_ENTROPY");
- if(force_entropy) {
- if(!seeded) {
- unsigned int seed = 0;
- size_t elen = strlen(force_entropy);
- size_t clen = sizeof(seed);
- size_t min = elen < clen ? elen : clen;
- memcpy((char *)&seed, force_entropy, min);
- randseed = ntohl(seed);
- seeded = TRUE;
+ if(env_override) {
+ char *force_entropy = getenv("CURL_ENTROPY");
+ if(force_entropy) {
+ if(!seeded) {
+ unsigned int seed = 0;
+ size_t elen = strlen(force_entropy);
+ size_t clen = sizeof(seed);
+ size_t min = elen < clen ? elen : clen;
+ memcpy((char *)&seed, force_entropy, min);
+ randseed = ntohl(seed);
+ seeded = TRUE;
+ }
+ else
+ randseed++;
+ *rnd = randseed;
+ return CURLE_OK;
}
- else
- randseed++;
- *rnd = randseed;
- return CURLE_OK;
}
+#else
+ (void)env_override;
#endif
/* data may be NULL! */
*
*/
-CURLcode Curl_rand(struct Curl_easy *data, unsigned char *rnd, size_t num)
+CURLcode Curl_rand_bytes(struct Curl_easy *data,
+#ifdef DEBUGBUILD
+ bool env_override,
+#endif
+ unsigned char *rnd, size_t num)
{
CURLcode result = CURLE_BAD_FUNCTION_ARGUMENT;
+#ifndef DEBUGBUILD
+ const bool env_override = FALSE;
+#endif
DEBUGASSERT(num);
unsigned int r;
size_t left = num < sizeof(unsigned int) ? num : sizeof(unsigned int);
- result = randit(data, &r);
+ result = randit(data, &r, env_override);
if(result)
return result;
while(num) {
do {
- result = randit(data, &r);
+ result = randit(data, &r, TRUE);
if(result)
return result;
} while(r >= (UINT_MAX - UINT_MAX % alnumspace));
*
***************************************************************************/
-CURLcode Curl_rand(struct Curl_easy *data, unsigned char *rnd, size_t num);
+CURLcode Curl_rand_bytes(struct Curl_easy *data,
+#ifdef DEBUGBUILD
+ bool allow_env_override,
+#endif
+ unsigned char *rnd, size_t num);
+
+#ifdef DEBUGBUILD
+#define Curl_rand(a,b,c) Curl_rand_bytes((a), TRUE, (b), (c))
+#else
+#define Curl_rand(a,b,c) Curl_rand_bytes((a), (b), (c))
+#endif
/*
* Curl_rand_hex() fills the 'rnd' buffer with a given 'num' size with random