Skip to content

ClassCastException handling kwargs in Struct #9224

Description

@headius

A similar case to #9214 but more broken:

#!/usr/bin/env ruby

MyData = Struct.new(:value)

# Test 3: FAILS - Data.define with BOTH *args and **kwargs
def test_data_with_both_splats(*args, **kwargs)
  MyData.new(*args, **kwargs)
end

begin
  puts "✓ Test 3 - Data.define with both splats: #{test_data_with_both_splats("ok").value}"
rescue ArgumentError => e
  puts "✗ Test 3 - Data.define with both splats: #{e.class}: #{e.message}"
end

This produces a ClassCastException when it improperly handles the string being passed in lieu of keyword arguments.

$ jruby blah.rb    
Unhandled Java exception: java.lang.ClassCastException: class org.jruby.RubyString cannot be cast to class org.jruby.RubyHash (org.jruby.RubyString and org.jruby.RubyHash are in module org.jruby.dist of loader 'app')
java.lang.ClassCastException: class org.jruby.RubyString cannot be cast to class org.jruby.RubyHash (org.jruby.RubyString and org.jruby.RubyHash are in module org.jruby.dist of loader 'app')
                            initialize at org/jruby/RubyStruct.java:537
                                  call at org/jruby/RubyStruct$INVOKER$i$initialize.gen:-1
                                  call at org/jruby/internal/runtime/methods/JavaMethod.java:841
                          cacheAndCall at org/jruby/runtime/callsite/CachingCallSite.java:446
                                  call at org/jruby/runtime/callsite/CachingCallSite.java:92
                              callInit at org/jruby/RubyObject.java:274
                             newStruct at org/jruby/api/Create.java:487
                             newStruct at org/jruby/RubyStruct.java:339
                                  call at org/jruby/RubyStruct$StructMethods$INVOKER$s$newStruct.gen:-1
                   performIndirectCall at org/jruby/ir/targets/indy/InvokeSite.java:882
                                invoke at org/jruby/ir/targets/indy/InvokeSite.java:786
  ️❤ def test_data_with_both_splats #0 at blah.rb:7

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions