diff --git a/RSA.xs b/RSA.xs index 6bf64b3..270f17c 100644 --- a/RSA.xs +++ b/RSA.xs @@ -293,16 +293,24 @@ SV* extractBioString(BIO* p_stringBio) { SV* sv; char* datap; - long datasize = 0; + long datasize; + int error = 0; - CHECK_OPEN_SSL(BIO_flush(p_stringBio) == 1); + THROW(BIO_flush(p_stringBio) == 1); datasize = BIO_get_mem_data(p_stringBio, &datap); + THROW(datasize > 0); + sv = newSVpv(datap, datasize); - CHECK_OPEN_SSL(BIO_set_close(p_stringBio, BIO_CLOSE) == 1); + BIO_set_close(p_stringBio, BIO_CLOSE); BIO_free(p_stringBio); return sv; + + err: + BIO_free(p_stringBio); + CHECK_OPEN_SSL(0); + return NULL; /* unreachable, CHECK_OPEN_SSL croaks */ } EVP_PKEY* _load_rsa_key(SV* p_keyStringSv,