Details
-
Type:
Task
-
Status:
Resolved
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: JRuby-OSSL 0.7.3, JRuby 1.6RC2
-
Fix Version/s: JRuby-OSSL 0.7.4
-
Component/s: Core Classes/Modules, OpenSSL
-
Labels:None
-
Environment:jruby 1.6.0.RC2 (ruby 1.8.7 patchlevel 330) (2011-02-17 8f3eab6) (Java HotSpot(TM) 64-Bit Server VM 1.7.0-ea) [linux-amd64-java]
-
Number of attachments :
Description
To avoid things to be unnecessarily complexed, I talk about 1.8 mode only here. Beside this, JRuby-OSSL doesn't support 1.9 mode now ![]()
The commit [master 617654c2] *1 for 1.6.0.RC2 changed RubyString#decodeString() (UTF8 decoding) to use 'new String(..., encname)' *2 instead of Charset#decode(), and it affects JRuby-OSSL. From 1.6.0.RC2 the JRuby-OSSL testsuite starts failing.
JRuby-OSSL is using RubyString#toString() which uses the RubyString#decodeString(), to get java.lang.String. The String could be a Base64 encoded ascii data (PEM format) or a binary data (DER format). And the JRuby-OSSL test failures are for binary data handling.
Charset#decode() which is used before RC2 left unknown UTF8 bytes in decoded String, but new String(..., encname) does not. According to *1 it is 'unspecified' but on my Ubuntu box, Open JDK 6, 7, J9 and JRockit R28.1 all trims uknown bytes. So RubyString#toString() returns trimmed byte sequences
packed in java.lang.String from RC2 if JRuby-OSSL tries to handle DER formatted data (a binary, looks malformed as an UTF8 string.)
JRuby-OSSL should fix to retrieve ByteList from RubyString and I would support 1.6 users to upgrade to newer JRuby-OSSL gem but other JRuby ext developers would be affected as well I think. Signature RubyString#toString() looks too promising for an ext developer, no? ![]()
Tom, what do you think about this issue? (I'm asking Tom since git log says you're the author of th
e commit)
*1 https://github.com/jruby/jruby/commit/617654c2da4fc793529fac7a8845b903ae1b6919
*2 http://download.oracle.com/javase/6/docs/api/java/lang/String.html#String(byte[], int, int, java.lang.String)
Since I wrote a question to Tom. Let me know when my guessing is wrong.