aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2021-09-12 22:25:46 +0900
committerGitHub <noreply@github.com>2021-09-12 22:25:46 +0900
commitcf54f72df20879dfb377c9ca4d397285c1560daa (patch)
tree0e8f2d2507d69478ceb28faf80215db186dccc6c
parent74731d9406eb80095bdc694b18eaa0cecd2730aa (diff)
parent11b1d8a6b872a215152d55e6aec7498cea0b7f8f (diff)
downloadruby-openssl-cf54f72df20879dfb377c9ca4d397285c1560daa.tar.gz
Merge pull request #455 from ruby/printf-warnings
Suppress printf format warnings
-rw-r--r--ext/openssl/ossl.c23
-rw-r--r--ext/openssl/ossl.h4
-rw-r--r--ext/openssl/ossl_config.c2
-rw-r--r--ext/openssl/ossl_pkey_ec.c6
-rw-r--r--ext/openssl/ossl_ts.c2
5 files changed, 22 insertions, 15 deletions
diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c
index cf070ef8..f214bcb5 100644
--- a/ext/openssl/ossl.c
+++ b/ext/openssl/ossl.c
@@ -268,15 +268,11 @@ ossl_to_der_if_possible(VALUE obj)
/*
* Errors
*/
-static VALUE
-ossl_make_error(VALUE exc, const char *fmt, va_list args)
+VALUE
+ossl_make_error(VALUE exc, VALUE str)
{
- VALUE str = Qnil;
unsigned long e;
- if (fmt) {
- str = rb_vsprintf(fmt, args);
- }
e = ERR_peek_last_error();
if (e) {
const char *msg = ERR_reason_error_string(e);
@@ -300,10 +296,17 @@ ossl_raise(VALUE exc, const char *fmt, ...)
{
va_list args;
VALUE err;
- va_start(args, fmt);
- err = ossl_make_error(exc, fmt, args);
- va_end(args);
- rb_exc_raise(err);
+
+ if (fmt) {
+ va_start(args, fmt);
+ err = rb_vsprintf(fmt, args);
+ va_end(args);
+ }
+ else {
+ err = Qnil;
+ }
+
+ rb_exc_raise(ossl_make_error(exc, err));
}
void
diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h
index 577eb6d6..65d022c7 100644
--- a/ext/openssl/ossl.h
+++ b/ext/openssl/ossl.h
@@ -120,7 +120,9 @@ int ossl_pem_passwd_cb(char *, int, int, void *);
/*
* ERRor messages
*/
-NORETURN(void ossl_raise(VALUE, const char *, ...));
+PRINTF_ARGS(NORETURN(void ossl_raise(VALUE, const char *, ...)), 2, 3);
+/* Make exception instance from str and OpenSSL error reason string. */
+VALUE ossl_make_error(VALUE exc, VALUE str);
/* Clear OpenSSL error queue. If dOSSL is set, rb_warn() them. */
void ossl_clear_error(void);
diff --git a/ext/openssl/ossl_config.c b/ext/openssl/ossl_config.c
index 21c327b2..0bac0274 100644
--- a/ext/openssl/ossl_config.c
+++ b/ext/openssl/ossl_config.c
@@ -60,7 +60,7 @@ config_load_bio(CONF *conf, BIO *bio)
if (eline <= 0)
ossl_raise(eConfigError, "wrong config format");
else
- ossl_raise(eConfigError, "error in line %d", eline);
+ ossl_raise(eConfigError, "error in line %ld", eline);
}
BIO_free(bio);
diff --git a/ext/openssl/ossl_pkey_ec.c b/ext/openssl/ossl_pkey_ec.c
index 9b461cb6..26c627f2 100644
--- a/ext/openssl/ossl_pkey_ec.c
+++ b/ext/openssl/ossl_pkey_ec.c
@@ -596,8 +596,10 @@ static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self)
ossl_raise(rb_eArgError, "wrong number of arguments");
}
- if (group == NULL)
- ossl_raise(eEC_GROUP, "");
+#if !defined(LIKELY) && !defined(RB_LIKELY)
+#define LIKELY(x) (x)
+#endif
+ ASSUME(group);
RTYPEDDATA_DATA(self) = group;
return self;
diff --git a/ext/openssl/ossl_ts.c b/ext/openssl/ossl_ts.c
index 4654babf..dbd73748 100644
--- a/ext/openssl/ossl_ts.c
+++ b/ext/openssl/ossl_ts.c
@@ -1223,7 +1223,7 @@ end:
ASN1_OBJECT_free(def_policy_id_obj);
TS_RESP_CTX_free(ctx);
if (err_msg)
- ossl_raise(eTimestampError, err_msg);
+ rb_exc_raise(ossl_make_error(eTimestampError, rb_str_new_cstr(err_msg)));
if (status)
rb_jump_tag(status);
return ret;