diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-06-25 16:14:30 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-07-16 14:53:34 +0200 |
commit | 8a8364f26e45e3c02f704eff320d5d8041a67cba (patch) | |
tree | 21b172e54171c2aad34de294d5dfd9570361576b /src/libstrongswan/crypto/crypto_tester.c | |
parent | ce024c1662595f5cebf293e550c4dd7610955c2f (diff) | |
download | strongswan-8a8364f26e45e3c02f704eff320d5d8041a67cba.tar.bz2 strongswan-8a8364f26e45e3c02f704eff320d5d8041a67cba.tar.xz |
Check rng return value in crypto tester
Diffstat (limited to 'src/libstrongswan/crypto/crypto_tester.c')
-rw-r--r-- | src/libstrongswan/crypto/crypto_tester.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/libstrongswan/crypto/crypto_tester.c b/src/libstrongswan/crypto/crypto_tester.c index d4387d806..868128dcd 100644 --- a/src/libstrongswan/crypto/crypto_tester.c +++ b/src/libstrongswan/crypto/crypto_tester.c @@ -956,7 +956,11 @@ static u_int bench_rng(private_crypto_tester_t *this, start_timing(&start); while (end_timing(&start) < this->bench_time) { - rng->get_bytes(rng, buf.len, buf.ptr); + if (!rng->get_bytes(rng, buf.len, buf.ptr)) + { + runs = 0; + break; + } runs++; } free(buf.ptr); @@ -986,8 +990,8 @@ METHOD(crypto_tester_t, test_rng, bool, enumerator = this->rng->create_enumerator(this->rng); while (enumerator->enumerate(enumerator, &vector)) { + chunk_t data = chunk_empty; rng_t *rng; - chunk_t data; if (vector->quality != quality) { @@ -1007,24 +1011,22 @@ METHOD(crypto_tester_t, test_rng, bool, failed = FALSE; /* allocated bytes */ - rng->allocate_bytes(rng, vector->len, &data); - if (data.len != vector->len) - { - failed = TRUE; - } - if (!vector->test(vector->user, data)) + if (!rng->allocate_bytes(rng, vector->len, &data) || + data.len != vector->len || + !vector->test(vector->user, data)) { failed = TRUE; } - /* bytes to existing buffer */ - memset(data.ptr, 0, data.len); - rng->get_bytes(rng, vector->len, data.ptr); - if (!vector->test(vector->user, data)) - { - failed = TRUE; + if (!failed) + { /* write bytes into existing buffer */ + memset(data.ptr, 0, data.len); + if (!rng->get_bytes(rng, vector->len, data.ptr) || + !vector->test(vector->user, data)) + { + failed = TRUE; + } } free(data.ptr); - rng->destroy(rng); if (failed) { |