Issue #5547 has been updated by Martin Bosslet.


Yui NARUSE wrote:
> Yes, the phenomenon, the result of above code will change after OpenSSL::Engine.load on NetBSD current,
> itself should be cryptodev's problem.
> But the test is against a principle that a test shouldn't have side effects.
> It has clearly a side effect: an engine is loaded.

I agree, and the side effect won't give us reproducible results anyway as your
example with cryptodev has clearly shown. The initial bug that was fixed by
test_engines_free was regardless of the underlying engine being used.

So I decided to make all tests use the "openssl" engine. It's software-based and
it should behave the same for any of us. If we get differing results from
anyone, we can at least conclude that it must be a bug in either OpenSSL itself
or in ext/openssl.

This removes side effects from differing "default engines" or at least it should
contain them in a controllable manner. Would you agree?
----------------------------------------
Bug #5547: Cleanup engine after a test
http://redmine.ruby-lang.org/issues/5547

Author: Yui NARUSE
Status: Third Party's Issue
Priority: Normal
Assignee: Yui NARUSE
Category: 
Target version: 
ruby -v: ruby 2.0.0dev (2011-11-01 trunk 33605) [i386-netbsdelf5.99.56]


OpenSSL::Engine.load() loads engines and register them, and it may change the behavior of some existing methods.

For example on NetBSD 6 with cryptodev, it effects DH as folloing:
./ruby -ropenssl -e'p OpenSSL::PKey::DH.new(256).public_key.private?;p OpenSSL::Engine.load;p OpenSSL::PKey::DH.new(256).public_key.private?'
false
true
true

After loads cryptodev and register it (yes, it needs register. current ext/openssl can't register a engine),
OpenSSL::PKey::DH#private?'s behavior seems to be changed.

Whether it is a bug or not, test/openssl/test_engine.rb should be fixed.

Index: test/openssl/test_engine.rb
===================================================================
--- test/openssl/test_engine.rb (revision 33605)
+++ test/openssl/test_engine.rb (working copy)
@@ -8,6 +8,7 @@
     OpenSSL::Engine.load
     OpenSSL::Engine.engines
     OpenSSL::Engine.engines
+    OpenSSL::Engine.cleanup
   end
 
 end


-- 
http://redmine.ruby-lang.org