ruby-changes:19205
From: naruse <ko1@a...>
Date: Wed, 6 Apr 2011 15:14:13 +0900 (JST)
Subject: [ruby-changes:19205] Ruby:r31244 (trunk): * ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize):
naruse 2011-04-06 15:14:05 +0900 (Wed, 06 Apr 2011) New Revision: 31244 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31244 Log: * ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize): pop pushed error after each try of reading. fixes #4550 * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto. * ext/openssl/ossl_pkey_ec.c (ossl_ec_initialize): ditto. Modified files: trunk/ChangeLog trunk/ext/openssl/ossl_pkey_dh.c trunk/ext/openssl/ossl_pkey_dsa.c trunk/ext/openssl/ossl_pkey_ec.c trunk/test/openssl/test_pkey_rsa.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 31243) +++ ChangeLog (revision 31244) @@ -1,3 +1,12 @@ +Wed Apr 6 15:12:40 2011 NARUSE, Yui <naruse@r...> + + * ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize): + pop pushed error after each try of reading. fixes #4550 + + * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto. + + * ext/openssl/ossl_pkey_ec.c (ossl_ec_initialize): ditto. + Wed Apr 6 11:36:44 2011 NARUSE, Yui <naruse@r...> * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_initialize): Index: ext/openssl/ossl_pkey_dsa.c =================================================================== --- ext/openssl/ossl_pkey_dsa.c (revision 31243) +++ ext/openssl/ossl_pkey_dsa.c (revision 31244) @@ -162,22 +162,29 @@ dsa = PEM_read_bio_DSAPrivateKey(in, NULL, ossl_pem_passwd_cb, passwd); if (!dsa) { (void)BIO_reset(in); + (void)ERR_get_error(); dsa = PEM_read_bio_DSAPublicKey(in, NULL, NULL, NULL); } if (!dsa) { (void)BIO_reset(in); + (void)ERR_get_error(); dsa = PEM_read_bio_DSA_PUBKEY(in, NULL, NULL, NULL); } if (!dsa) { (void)BIO_reset(in); + (void)ERR_get_error(); dsa = d2i_DSAPrivateKey_bio(in, NULL); } if (!dsa) { (void)BIO_reset(in); + (void)ERR_get_error(); dsa = d2i_DSA_PUBKEY_bio(in, NULL); } BIO_free(in); - if (!dsa) ossl_raise(eDSAError, "Neither PUB key nor PRIV key:"); + if (!dsa) { + (void)ERR_get_error(); + ossl_raise(eDSAError, "Neither PUB key nor PRIV key:"); + } } if (!EVP_PKEY_assign_DSA(pkey, dsa)) { DSA_free(dsa); Index: ext/openssl/ossl_pkey_ec.c =================================================================== --- ext/openssl/ossl_pkey_ec.c (revision 31243) +++ ext/openssl/ossl_pkey_ec.c (revision 31244) @@ -187,14 +187,17 @@ ec = PEM_read_bio_ECPrivateKey(in, NULL, NULL, NULL); if (!ec) { (void)BIO_reset(in); + (void)ERR_get_error(); ec = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, NULL); } if (!ec) { (void)BIO_reset(in); + (void)ERR_get_error(); ec = d2i_ECPrivateKey_bio(in, NULL); } if (!ec) { (void)BIO_reset(in); + (void)ERR_get_error(); ec = d2i_EC_PUBKEY_bio(in, NULL); } @@ -204,6 +207,7 @@ const char *name = StringValueCStr(arg); int nid = OBJ_sn2nid(name); + (void)ERR_get_error(); if (nid == NID_undef) ossl_raise(eECError, "unknown curve name (%s)\n", name); Index: ext/openssl/ossl_pkey_dh.c =================================================================== --- ext/openssl/ossl_pkey_dh.c (revision 31243) +++ ext/openssl/ossl_pkey_dh.c (revision 31244) @@ -170,10 +170,14 @@ dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL); if (!dh){ (void)BIO_reset(in); + (void)ERR_get_error(); dh = d2i_DHparams_bio(in, NULL); } BIO_free(in); - if (!dh) ossl_raise(eDHError, NULL); + if (!dh) { + (void)ERR_get_error(); + ossl_raise(eDHError, NULL); + } } if (!EVP_PKEY_assign_DH(pkey, dh)) { DH_free(dh); Index: test/openssl/test_pkey_rsa.rb =================================================================== --- test/openssl/test_pkey_rsa.rb (revision 31243) +++ test/openssl/test_pkey_rsa.rb (revision 31244) @@ -39,6 +39,13 @@ key4 = OpenSSL::PKey::RSA.new(key3.to_der) assert(!key4.private?) end + + def test_new + key = OpenSSL::PKey::RSA.new 512 + pem = key.public_key.to_pem + OpenSSL::PKey::RSA.new pem + assert_equal([], OpenSSL.errors) + end end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/