diff --git a/ext/openssl/ossl_bio.c b/ext/openssl/ossl_bio.c index 42833d901..1f01f5574 100644 --- a/ext/openssl/ossl_bio.c +++ b/ext/openssl/ossl_bio.c @@ -16,11 +16,14 @@ ossl_obj2bio(volatile VALUE *pobj) BIO *bio; if (RB_TYPE_P(obj, T_FILE)) - obj = rb_funcallv(obj, rb_intern("read"), 0, NULL); + obj = rb_funcallv(obj, rb_intern("read"), 0, NULL); + StringValue(obj); bio = BIO_new_mem_buf(RSTRING_PTR(obj), RSTRING_LENINT(obj)); + if (!bio) - ossl_raise(eOSSLError, "BIO_new_mem_buf"); + ossl_raise(eOSSLError, "BIO_new_mem_buf"); + *pobj = obj; return bio; } @@ -28,15 +31,16 @@ ossl_obj2bio(volatile VALUE *pobj) VALUE ossl_membio2str(BIO *bio) { - VALUE ret; + VALUE result; int state; - BUF_MEM *buf; + BUF_MEM *memory_buffer; - BIO_get_mem_ptr(bio, &buf); - ret = ossl_str_new(buf->data, buf->length, &state); + BIO_get_mem_ptr(bio, &memory_buffer); + result = ossl_str_new(memory_buffer->data, memory_buffer->length, &state); BIO_free(bio); + if (state) - rb_jump_tag(state); + rb_jump_tag(state); - return ret; + return result; } diff --git a/ext/openssl/ossl_x509cert.c b/ext/openssl/ossl_x509cert.c index 3c7ca0faf..563fb0a93 100644 --- a/ext/openssl/ossl_x509cert.c +++ b/ext/openssl/ossl_x509cert.c @@ -887,9 +887,6 @@ ossl_x509_load(VALUE klass, VALUE buffer) { BIO *in = ossl_obj2bio(&buffer); - if (in == NULL) - ossl_raise(eX509CertError, NULL); - return rb_ensure(load_chained_certificates, (VALUE)in, load_chained_certificates_ensure, (VALUE)in); }