aboutsummaryrefslogtreecommitdiffstats
path: root/ext/openssl/ossl_rand.c
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-11-30 20:29:02 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-11-30 20:29:02 +0000
commit07083767e9cf500b31670fe0d5dd55a162f0c520 (patch)
treeb07a240feb01d09e41dd01d4d7a72fea7e7f95c5 /ext/openssl/ossl_rand.c
parent86caaefc1ff89e8d0c97572661f70f55052bc0ce (diff)
downloadruby-07083767e9cf500b31670fe0d5dd55a162f0c520.tar.gz
* ext/openssl/ossl_rand.c (ossl_rand_bytes): RAND_bytes could
be return -1 as an error. Therefore, added error handling. * ext/openssl/ossl_pkey_dsa.c (dsa_generate): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52810 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/openssl/ossl_rand.c')
-rw-r--r--ext/openssl/ossl_rand.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/ext/openssl/ossl_rand.c b/ext/openssl/ossl_rand.c
index 018ef977ab..daf866d772 100644
--- a/ext/openssl/ossl_rand.c
+++ b/ext/openssl/ossl_rand.c
@@ -110,10 +110,16 @@ ossl_rand_bytes(VALUE self, VALUE len)
{
VALUE str;
int n = NUM2INT(len);
+ int ret;
str = rb_str_new(0, n);
- if (!RAND_bytes((unsigned char *)RSTRING_PTR(str), n)) {
- ossl_raise(eRandomError, NULL);
+ ret = RAND_bytes((unsigned char *)RSTRING_PTR(str), n);
+ if (ret == 0){
+ char buf[256];
+ ERR_error_string_n(ERR_get_error(), buf, 256);
+ ossl_raise(eRandomError, "RAND_bytes error: %s", buf);
+ } else if (ret == -1) {
+ ossl_raise(eRandomError, "RAND_bytes is not supported");
}
return str;