diff --git a/src/main/java/org/jruby/ext/openssl/CipherStrings.java b/src/main/java/org/jruby/ext/openssl/CipherStrings.java index c626fd9b..afda2819 100644 --- a/src/main/java/org/jruby/ext/openssl/CipherStrings.java +++ b/src/main/java/org/jruby/ext/openssl/CipherStrings.java @@ -512,8 +512,10 @@ static Collection matchingCiphers(final String cipherString, final String[] } int index = 0; - switch ( part.charAt(0) ) { - case '!': case '+': case '-': index++; break; + if (part.length() > 0) { + switch ( part.charAt(0) ) { + case '!': case '+': case '-': index++; break; + } } final Collection matching; diff --git a/src/test/ruby/ssl/test_context.rb b/src/test/ruby/ssl/test_context.rb index 9d6158d5..ee15e0c3 100644 --- a/src/test/ruby/ssl/test_context.rb +++ b/src/test/ruby/ssl/test_context.rb @@ -178,4 +178,12 @@ def test_context_ciphers assert_equal [], diff end unless java7? # would need to filter out stuff such as ECDHE-RSA-AES128-GCM-SHA256 + def test_set_ciphers_empty_array + context = OpenSSL::SSL::SSLContext.new + ex = assert_raise(OpenSSL::SSL::SSLError) do + context.ciphers = [] + end + assert_equal "no cipher match", ex.message + end + end