diff --git a/ext/java/org/msgpack/jruby/Factory.java b/ext/java/org/msgpack/jruby/Factory.java index 34a6c22a..bd31e685 100644 --- a/ext/java/org/msgpack/jruby/Factory.java +++ b/ext/java/org/msgpack/jruby/Factory.java @@ -112,7 +112,7 @@ public IRubyObject registerTypeInternal(ThreadContext ctx, IRubyObject type, IRu extensionRegistry.put(extModule, (int) typeId, recursive, packerProc, unpackerProc); if (extModule == runtime.getSymbol()) { - hasSymbolExtType = !packerProc.isNil(); + hasSymbolExtType = packerProc != null && !packerProc.isNil(); } if (options != null) { diff --git a/spec/factory_spec.rb b/spec/factory_spec.rb index 15b5e5d3..2abedab3 100644 --- a/spec/factory_spec.rb +++ b/spec/factory_spec.rb @@ -273,6 +273,12 @@ class MyType2 < MyType expect(factory.load(factory.dump(:foo))).to be == "foo" end + it 'handles Symbol type registered with only an unpacker' do + factory = MessagePack::Factory.new + factory.register_type(0x00, Symbol, unpacker: :to_sym.to_proc) + expect(factory.load(factory.dump(:foo))).to be == "foo" + end + describe "registering multiple ext type for the same class" do let(:payload) do factory = MessagePack::Factory.new