diff options
author | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-12-22 19:43:41 +0000 |
---|---|---|
committer | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-12-22 19:43:41 +0000 |
commit | d6e84b3ed8ed5e0a3e16959abe23a876de13c314 (patch) | |
tree | ca82c27159a486de45569adb066353009b12f15e /src | |
parent | 28e46df3e9ae576bbde956927eba6332acf90cdf (diff) | |
download | protobuf-d6e84b3ed8ed5e0a3e16959abe23a876de13c314.tar.gz protobuf-d6e84b3ed8ed5e0a3e16959abe23a876de13c314.tar.bz2 protobuf-d6e84b3ed8ed5e0a3e16959abe23a876de13c314.zip |
When serializing to an ostream, verify that there were no stream-level errors before returning success.
Diffstat (limited to 'src')
-rw-r--r-- | src/google/protobuf/message.cc | 7 | ||||
-rw-r--r-- | src/google/protobuf/message_unittest.cc | 15 |
2 files changed, 17 insertions, 5 deletions
diff --git a/src/google/protobuf/message.cc b/src/google/protobuf/message.cc index 09166f3a..91e6878e 100644 --- a/src/google/protobuf/message.cc +++ b/src/google/protobuf/message.cc @@ -168,8 +168,11 @@ bool Message::SerializePartialToFileDescriptor(int file_descriptor) const { } bool Message::SerializeToOstream(ostream* output) const { - io::OstreamOutputStream zero_copy_output(output); - return SerializeToZeroCopyStream(&zero_copy_output); + { + io::OstreamOutputStream zero_copy_output(output); + if (!SerializeToZeroCopyStream(&zero_copy_output)) return false; + } + return output->good(); } bool Message::SerializePartialToOstream(ostream* output) const { diff --git a/src/google/protobuf/message_unittest.cc b/src/google/protobuf/message_unittest.cc index 46e68446..33b9e77c 100644 --- a/src/google/protobuf/message_unittest.cc +++ b/src/google/protobuf/message_unittest.cc @@ -43,6 +43,7 @@ #include <unistd.h> #endif #include <sstream> +#include <fstream> #include <google/protobuf/stubs/common.h> #include <google/protobuf/io/zero_copy_stream_impl.h> @@ -77,9 +78,9 @@ TEST(MessageTest, SerializeHelpers) { string str1("foo"); string str2("bar"); - message.SerializeToString(&str1); - message.AppendToString(&str2); - message.SerializeToOstream(&stream); + EXPECT_TRUE(message.SerializeToString(&str1)); + EXPECT_TRUE(message.AppendToString(&str2)); + EXPECT_TRUE(message.SerializeToOstream(&stream)); EXPECT_EQ(str1.size() + 3, str2.size()); EXPECT_EQ("bar", str2.substr(0, 3)); @@ -95,6 +96,14 @@ TEST(MessageTest, SerializeHelpers) { } +TEST(MessageTest, SerializeToBrokenOstream) { + ofstream out; + protobuf_unittest::TestAllTypes message; + message.set_optional_int32(123); + + EXPECT_FALSE(message.SerializeToOstream(&out)); +} + TEST(MessageTest, ParseFromFileDescriptor) { string filename = TestSourceDir() + "/google/protobuf/testdata/golden_message"; |