@@ -1931,19 +1931,17 @@ private byte[] setToDER(final ThreadContext context) throws IOException {
19311931 private ASN1EncodableVector toASN1EncodableVector (final ThreadContext context ) {
19321932 final ASN1EncodableVector vec = new ASN1EncodableVector ();
19331933 final IRubyObject value = value (context );
1934- if ( value instanceof RubyArray ) {
1935- final RubyArray val = (RubyArray ) value ;
1936- for ( int i = 0 ; i < val .size (); i ++ ) {
1937- if ( addEntry (context , vec , val .entry (i )) ) break ;
1934+ final RubyArray val ;
1935+ if (value instanceof RubyArray ) {
1936+ val = (RubyArray ) value ;
1937+ } else {
1938+ if (!value .respondsTo ("to_a" )) {
1939+ throw context .runtime .newTypeError ("can't convert " + value .getMetaClass ().getName () + " into Array" );
19381940 }
1941+ val = (RubyArray ) value .callMethod (context , "to_a" );
19391942 }
1940- else {
1941- final int size = RubyInteger .num2int (value .callMethod (context , "size" ));
1942- for ( int i = 0 ; i < size ; i ++ ) {
1943- final RubyInteger idx = context .runtime .newFixnum (i );
1944- IRubyObject entry = value .callMethod (context , "[]" , idx );
1945- if ( addEntry (context , vec , entry ) ) break ;
1946- }
1943+ for ( int i = 0 ; i < val .size (); i ++ ) {
1944+ if ( addEntry (context , vec , val .entry (i )) ) break ;
19471945 }
19481946 return vec ;
19491947 }
0 commit comments