diff options
author | Feng Xiao <xiaofeng@google.com> | 2016-09-02 11:01:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-02 11:01:05 -0700 |
commit | fa6428ed2a2628c874bf65d8fb239f0a6a32bb14 (patch) | |
tree | 53f442997e239b53d49540e20f6702db8f23a729 /src/google | |
parent | 85c1adf9f9301da6ac58ea326651bd37503d4728 (diff) | |
parent | df6088a7e82b3615054d0ec6af3ff3e3e793d6cd (diff) | |
download | protobuf-fa6428ed2a2628c874bf65d8fb239f0a6a32bb14.tar.gz protobuf-fa6428ed2a2628c874bf65d8fb239f0a6a32bb14.tar.bz2 protobuf-fa6428ed2a2628c874bf65d8fb239f0a6a32bb14.zip |
Merge pull request #2045 from mike07026/master
fix #1342 cause by ownership issues
Diffstat (limited to 'src/google')
-rw-r--r-- | src/google/protobuf/util/internal/default_value_objectwriter.cc | 5 | ||||
-rw-r--r-- | src/google/protobuf/util/json_util_test.cc | 28 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/google/protobuf/util/internal/default_value_objectwriter.cc b/src/google/protobuf/util/internal/default_value_objectwriter.cc index 1e8dab70..fa31f763 100644 --- a/src/google/protobuf/util/internal/default_value_objectwriter.cc +++ b/src/google/protobuf/util/internal/default_value_objectwriter.cc @@ -165,7 +165,10 @@ DefaultValueObjectWriter* DefaultValueObjectWriter::RenderBytes( if (current_ == NULL) { ow_->RenderBytes(name, value); } else { - RenderDataPiece(name, DataPiece(value, false, true)); + // Since StringPiece is essentially a pointer, takes a copy of "value" to + // avoid ownership issues. + string_values_.push_back(new string(value.ToString())); + RenderDataPiece(name, DataPiece(*string_values_.back(), false, true)); } return this; } diff --git a/src/google/protobuf/util/json_util_test.cc b/src/google/protobuf/util/json_util_test.cc index dacac5e0..24ff5fd6 100644 --- a/src/google/protobuf/util/json_util_test.cc +++ b/src/google/protobuf/util/json_util_test.cc @@ -128,6 +128,34 @@ TEST_F(JsonUtilTest, TestDefaultValues) { "\"repeatedMessageValue\":[]" "}", ToJson(m, options)); + + options.always_print_primitive_fields = true; + m.set_string_value("i am a test string value"); + m.set_bytes_value("i am a test bytes value"); + EXPECT_EQ( + "{\"boolValue\":false," + "\"int32Value\":0," + "\"int64Value\":\"0\"," + "\"uint32Value\":0," + "\"uint64Value\":\"0\"," + "\"floatValue\":0," + "\"doubleValue\":0," + "\"stringValue\":\"i am a test string value\"," + "\"bytesValue\":\"aSBhbSBhIHRlc3QgYnl0ZXMgdmFsdWU=\"," + "\"enumValue\":\"FOO\"," + "\"repeatedBoolValue\":[]," + "\"repeatedInt32Value\":[]," + "\"repeatedInt64Value\":[]," + "\"repeatedUint32Value\":[]," + "\"repeatedUint64Value\":[]," + "\"repeatedFloatValue\":[]," + "\"repeatedDoubleValue\":[]," + "\"repeatedStringValue\":[]," + "\"repeatedBytesValue\":[]," + "\"repeatedEnumValue\":[]," + "\"repeatedMessageValue\":[]" + "}", + ToJson(m, options)); } TEST_F(JsonUtilTest, ParseMessage) { |