@@ -1931,19 +1931,17 @@ private byte[] setToDER(final ThreadContext context) throws IOException {
1931
1931
private ASN1EncodableVector toASN1EncodableVector (final ThreadContext context ) {
1932
1932
final ASN1EncodableVector vec = new ASN1EncodableVector ();
1933
1933
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" );
1938
1940
}
1941
+ val = (RubyArray ) value .callMethod (context , "to_a" );
1939
1942
}
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 ;
1947
1945
}
1948
1946
return vec ;
1949
1947
}
0 commit comments