diff options
author | Chris Fallin <cfallin@google.com> | 2015-04-13 14:01:54 -0700 |
---|---|---|
committer | Chris Fallin <cfallin@google.com> | 2015-04-13 14:02:43 -0700 |
commit | e9abbd23fbb60da882833e7212345a4250665c92 (patch) | |
tree | dfe352de47cd03a29e2a20c952442cc541b2adeb /ruby/tests | |
parent | be89e626a6d61be50844ba78cfbff857a4c59c3b (diff) | |
download | protobuf-e9abbd23fbb60da882833e7212345a4250665c92.tar.gz protobuf-e9abbd23fbb60da882833e7212345a4250665c92.tar.bz2 protobuf-e9abbd23fbb60da882833e7212345a4250665c92.zip |
Fixed issue #283: crash in JSON handler cleanup.
Includes repro test case from @wfarr.
Diffstat (limited to 'ruby/tests')
-rw-r--r-- | ruby/tests/basic.rb | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/ruby/tests/basic.rb b/ruby/tests/basic.rb index 9d0f0a98..1c3fb62c 100644 --- a/ruby/tests/basic.rb +++ b/ruby/tests/basic.rb @@ -8,6 +8,19 @@ require 'test/unit' module BasicTest pool = Google::Protobuf::DescriptorPool.new pool.build do + add_message "Foo" do + optional :bar, :message, 1, "Bar" + repeated :baz, :message, 2, "Baz" + end + + add_message "Bar" do + optional :msg, :string, 1 + end + + add_message "Baz" do + optional :msg, :string, 1 + end + add_message "TestMessage" do optional :optional_int32, :int32, 1 optional :optional_int64, :int64, 2 @@ -84,6 +97,9 @@ module BasicTest end end + Foo = pool.lookup("Foo").msgclass + Bar = pool.lookup("Bar").msgclass + Baz = pool.lookup("Baz").msgclass TestMessage = pool.lookup("TestMessage").msgclass TestMessage2 = pool.lookup("TestMessage2").msgclass Recursive1 = pool.lookup("Recursive1").msgclass @@ -992,6 +1008,14 @@ module BasicTest json_text = TestMessage.encode_json(m) m2 = TestMessage.decode_json(json_text) assert m == m2 + + # Crash case from GitHub issue 283. + bar = Bar.new(msg: "bar") + baz1 = Baz.new(msg: "baz") + baz2 = Baz.new(msg: "quux") + Foo.encode_json(Foo.new) + Foo.encode_json(Foo.new(bar: bar)) + Foo.encode_json(Foo.new(bar: bar, baz: [baz1, baz2])) end def test_json_maps |