Index: third_party/protobuf/src/google/protobuf/io/coded_stream_unittest.cc |
diff --git a/third_party/protobuf/src/google/protobuf/io/coded_stream_unittest.cc b/third_party/protobuf/src/google/protobuf/io/coded_stream_unittest.cc |
index 7d29833250c6601b4010f608d3038e483ee5f1f3..ff268ab9bbd2581f43c5663d482069fa92028ff9 100644 |
--- a/third_party/protobuf/src/google/protobuf/io/coded_stream_unittest.cc |
+++ b/third_party/protobuf/src/google/protobuf/io/coded_stream_unittest.cc |
@@ -208,6 +208,33 @@ TEST_2D(CodedStreamTest, ReadTag, kVarintCases, kBlockSizes) { |
EXPECT_EQ(kVarintCases_case.size, input.ByteCount()); |
} |
+// This is the regression test that verifies that there is no issues |
+// with the empty input buffers handling. |
+TEST_F(CodedStreamTest, EmptyInputBeforeEos) { |
+ class In : public ZeroCopyInputStream { |
+ public: |
+ In() : count_(0) {} |
+ private: |
+ virtual bool Next(const void** data, int* size) { |
+ *data = NULL; |
+ *size = 0; |
+ return count_++ < 2; |
+ } |
+ virtual void BackUp(int count) { |
+ GOOGLE_LOG(FATAL) << "Tests never call this."; |
+ } |
+ virtual bool Skip(int count) { |
+ GOOGLE_LOG(FATAL) << "Tests never call this."; |
+ return false; |
+ } |
+ virtual int64 ByteCount() const { return 0; } |
+ int count_; |
+ } in; |
+ CodedInputStream input(&in); |
+ input.ReadTag(); |
+ EXPECT_TRUE(input.ConsumedEntireMessage()); |
+} |
+ |
TEST_1D(CodedStreamTest, ExpectTag, kVarintCases) { |
// Leave one byte at the beginning of the buffer so we can read it |
// to force the first buffer to be loaded. |
@@ -995,6 +1022,7 @@ TEST_F(CodedStreamTest, TotalBytesLimitNotValidMessageEnd) { |
EXPECT_FALSE(coded_input.ConsumedEntireMessage()); |
} |
+ |
TEST_F(CodedStreamTest, RecursionLimit) { |
ArrayInputStream input(buffer_, sizeof(buffer_)); |
CodedInputStream coded_input(&input); |