Эх сурвалжийг харах

Merge pull request #284 from cfallin/issue-283

Fix for issue 283: JSON handler cleanup typo causing segfault.
Joshua Haberman 10 жил өмнө
parent
commit
8fe135d212

+ 1 - 1
ruby/ext/google/protobuf_c/defs.c

@@ -250,7 +250,7 @@ void Descriptor_free(void* _self) {
                        &self->pb_serialize_handlers);
                        &self->pb_serialize_handlers);
   }
   }
   if (self->json_serialize_handlers) {
   if (self->json_serialize_handlers) {
-    upb_handlers_unref(self->pb_serialize_handlers,
+    upb_handlers_unref(self->json_serialize_handlers,
                        &self->json_serialize_handlers);
                        &self->json_serialize_handlers);
   }
   }
   xfree(self);
   xfree(self);

+ 1 - 1
ruby/google-protobuf.gemspec

@@ -1,6 +1,6 @@
 Gem::Specification.new do |s|
 Gem::Specification.new do |s|
   s.name        = "google-protobuf"
   s.name        = "google-protobuf"
-  s.version     = "3.0.0.alpha.3.0.pre"
+  s.version     = "3.0.0.alpha.3.1.pre"
   s.licenses    = ["BSD"]
   s.licenses    = ["BSD"]
   s.summary     = "Protocol Buffers"
   s.summary     = "Protocol Buffers"
   s.description = "Protocol Buffers are Google's data interchange format."
   s.description = "Protocol Buffers are Google's data interchange format."

+ 24 - 0
ruby/tests/basic.rb

@@ -8,6 +8,19 @@ require 'test/unit'
 module BasicTest
 module BasicTest
   pool = Google::Protobuf::DescriptorPool.new
   pool = Google::Protobuf::DescriptorPool.new
   pool.build do
   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
     add_message "TestMessage" do
       optional :optional_int32,  :int32,        1
       optional :optional_int32,  :int32,        1
       optional :optional_int64,  :int64,        2
       optional :optional_int64,  :int64,        2
@@ -84,6 +97,9 @@ module BasicTest
     end
     end
   end
   end
 
 
+  Foo = pool.lookup("Foo").msgclass
+  Bar = pool.lookup("Bar").msgclass
+  Baz = pool.lookup("Baz").msgclass
   TestMessage = pool.lookup("TestMessage").msgclass
   TestMessage = pool.lookup("TestMessage").msgclass
   TestMessage2 = pool.lookup("TestMessage2").msgclass
   TestMessage2 = pool.lookup("TestMessage2").msgclass
   Recursive1 = pool.lookup("Recursive1").msgclass
   Recursive1 = pool.lookup("Recursive1").msgclass
@@ -992,6 +1008,14 @@ module BasicTest
       json_text = TestMessage.encode_json(m)
       json_text = TestMessage.encode_json(m)
       m2 = TestMessage.decode_json(json_text)
       m2 = TestMessage.decode_json(json_text)
       assert m == m2
       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
     end
 
 
     def test_json_maps
     def test_json_maps