summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/crypto.c8
-rw-r--r--src/or/rephist.c8
2 files changed, 9 insertions, 7 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c
index bcb8a375a8..adf375bd83 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1494,14 +1494,12 @@ crypto_expand_key_material(const char *key_in, size_t key_in_len,
tor_assert(key_out_len <= DIGEST_LEN*256);
memcpy(tmp, key_in, key_in_len);
- for (cp = key_out, i=0; key_out_len;
- ++i, cp += DIGEST_LEN, key_out_len -= DIGEST_LEN) {
+ for (cp = key_out, i=0; cp < key_out+key_out_len;
+ ++i, cp += DIGEST_LEN) {
tmp[key_in_len] = i;
if (crypto_digest(digest, tmp, key_in_len+1))
goto err;
- memcpy(cp, digest, MIN(DIGEST_LEN, key_out_len));
- if (key_out_len < DIGEST_LEN)
- break;
+ memcpy(cp, digest, MIN(DIGEST_LEN, key_out_len-(cp-key_out)));
}
memset(tmp, 0, key_in_len+1);
tor_free(tmp);
diff --git a/src/or/rephist.c b/src/or/rephist.c
index ae9442dd55..c712f1525e 100644
--- a/src/or/rephist.c
+++ b/src/or/rephist.c
@@ -599,7 +599,9 @@ rep_hist_fill_bandwidth_history(char *buf, size_t len, bw_array_t *b)
for (n=0; n<b->num_maxes_set; ++n,++i) {
uint64_t total;
- while (i >= NUM_TOTALS) i -= NUM_TOTALS;
+ if (i >= NUM_TOTALS)
+ i -= NUM_TOTALS;
+ tor_assert(i < NUM_TOTALS);
/* Round the bandwidth used down to the nearest 1k. */
total = b->totals[i] & ~0x3ff;
if (n==(b->num_maxes_set-1))
@@ -1473,7 +1475,9 @@ hs_usage_format_history(char *buf, size_t len, uint32_t *data)
i = current_period->next_idx;
}
for (n = 0; n < current_period->num_set; ++n,++i) {
- while (i >= NUM_TOTALS_HS_USAGE) i -= NUM_TOTALS_HS_USAGE;
+ if (i >= NUM_TOTALS_HS_USAGE)
+ i -= NUM_TOTALS_HS_USAGE;
+ tor_assert(i < NUM_TOTALS_HS_USAGE);
if (n == (current_period->num_set-1))
tor_snprintf(cp, len-(cp-buf), "%d", data[i]);
else