1311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Copyright 2008 Google Inc.
2311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Author: Lincoln Smith
3311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff//
4311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Licensed under the Apache License, Version 2.0 (the "License");
5311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// you may not use this file except in compliance with the License.
6311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// You may obtain a copy of the License at
7311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff//
8311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff//      http://www.apache.org/licenses/LICENSE-2.0
9311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff//
10311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Unless required by applicable law or agreed to in writing, software
11311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// distributed under the License is distributed on an "AS IS" BASIS,
12311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// See the License for the specific language governing permissions and
14311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// limitations under the License.
15311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
16311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include <config.h>
17311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "google/vcdecoder.h"
18311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include <string>
19311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "testing.h"
20311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "vcdecoder_test.h"
21311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "vcdiff_defs.h"
22311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
23311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffnamespace open_vcdiff {
24311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
25311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, DecodeHeaderOnly) {
26311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
27311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.DecodeChunk(delta_file_header_.data(),
28311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   delta_file_header_.size(),
29311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   &output_));
30311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.FinishDecoding());
31311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
32311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
33311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
34311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, Decode) {
35311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
36311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
37311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   delta_file_.size(),
38311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   &output_));
39311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.FinishDecoding());
40732fff248e662ec47aa27c124632f406f27b6c8dopenvcdiff@gmail.com  EXPECT_EQ(expected_target_.c_str(), output_);
41311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
42311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
43311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// If we add a checksum to a standard-format delta file (without using format
44311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// extensions), it will be interpreted as random bytes inserted into the middle
45311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// of the file.  The decode operation should fail, but where exactly it fails is
46311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// not easy to predict.
47311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, StandardFormatDoesNotSupportChecksum) {
48311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ComputeAndAddChecksum();
49311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  InitializeDeltaFile();
50311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
51311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
52311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
53311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
54311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
55311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
56311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
57311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Remove one byte from the length of the chunk to process, and
58311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// verify that an error is returned for FinishDecoding().
59311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, FinishAfterDecodingPartialWindow) {
60311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
61311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
62311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   delta_file_.size() - 1,
63311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   &output_));
64311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.FinishDecoding());
65311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  // The decoder should not create more target bytes than were expected.
66311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_GE(expected_target_.size(), output_.size());
67311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
68311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
69311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, FinishAfterDecodingPartialWindowHeader) {
70311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
71311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
72311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   delta_file_header_.size()
73311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                       + delta_window_header_.size() - 1,
74311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   &output_));
75311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.FinishDecoding());
76311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
77311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
78311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
7928db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetMatchesWindowSizeLimit) {
8028db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  decoder_.SetMaximumTargetWindowSize(expected_target_.size());
8128db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
8228db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
8328db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff                                   delta_file_.size(),
8428db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff                                   &output_));
8528db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  EXPECT_TRUE(decoder_.FinishDecoding());
86732fff248e662ec47aa27c124632f406f27b6c8dopenvcdiff@gmail.com  EXPECT_EQ(expected_target_.c_str(), output_);
8728db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff}
8828db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff
8928db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetMatchesFileSizeLimit) {
9028db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  decoder_.SetMaximumTargetFileSize(expected_target_.size());
9128db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
9228db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
9328db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff                                   delta_file_.size(),
9428db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff                                   &output_));
9528db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  EXPECT_TRUE(decoder_.FinishDecoding());
96732fff248e662ec47aa27c124632f406f27b6c8dopenvcdiff@gmail.com  EXPECT_EQ(expected_target_.c_str(), output_);
9728db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff}
9828db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff
9928db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetExceedsWindowSizeLimit) {
10028db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  decoder_.SetMaximumTargetWindowSize(expected_target_.size() - 1);
10128db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
10228db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
10328db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff                                    delta_file_.size(),
10428db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff                                    &output_));
10528db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  EXPECT_EQ("", output_);
10628db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff}
10728db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff
10828db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetExceedsFileSizeLimit) {
10928db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  decoder_.SetMaximumTargetFileSize(expected_target_.size() - 1);
11028db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
11128db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
11228db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff                                    delta_file_.size(),
11328db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff                                    &output_));
11428db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff  EXPECT_EQ("", output_);
11528db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff}
11628db8079f707ebdf43ce62cdfd96eb39c8f889e0openvcdiff
117311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Fuzz bits to make sure decoder does not violently crash.
118311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// This test has no expected behavior except that no crashes should occur.
119311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// In some cases, changing bits will still decode to the correct target;
120311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// for example, changing unused bits within a bitfield.
121311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, FuzzBits) {
122311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  while (FuzzOneByteInDeltaFile()) {
123311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff    decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
124311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff    if (decoder_.DecodeChunk(delta_file_.data(),
125311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                             delta_file_.size(),
126311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                             &output_)) {
127311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      decoder_.FinishDecoding();
128311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff    }
129311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff    InitializeDeltaFile();
130311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff    output_.clear();
131311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  }
132311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
133311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
134311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Change each element of the delta file window to an erroneous value
135311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// and make sure it's caught as an error.
136311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
137311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, WinIndicatorHasBothSourceAndTarget) {
138311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size()] = VCD_SOURCE + VCD_TARGET;
139311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
140311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
141311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
142311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
143311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
144311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
145311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
146311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, OkayToSetUpperBitsOfWinIndicator) {
147311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  // It is not an error to set any of the other bits in Win_Indicator
148311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  // besides VCD_SOURCE and VCD_TARGET.
149311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size()] = 0xFD;
150311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
151311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
152311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   delta_file_.size(),
153311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   &output_));
154311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.FinishDecoding());
155732fff248e662ec47aa27c124632f406f27b6c8dopenvcdiff@gmail.com  EXPECT_EQ(expected_target_.c_str(), output_);
156311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
157311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
158311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyInstructionsShouldFailIfNoSourceSegment) {
159311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  // Replace the Win_Indicator and the source size and source offset with a
160311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  // single 0 byte (a Win_Indicator for a window with no source segment.)
161311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_window_header_.replace(0, 4, "\0", 1);
162311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  InitializeDeltaFile();
163311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
164311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
165311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
166311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
167311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  // The first COPY instruction should fail, so there should be no output
168311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
169311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
170311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
171311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, SourceSegmentSizeExceedsDictionarySize) {
172311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 2];  // increment size
173311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
174311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
175311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
176311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
177311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
178311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
179311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
180311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, SourceSegmentSizeMaxInt) {
181311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(1, 2);
182311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
183311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
184311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
185311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
186311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
187311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
188311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
189311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, SourceSegmentSizeNegative) {
190311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(1, 2);
191311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
192311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
193311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
194311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
195311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
196311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
197311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
198311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, SourceSegmentSizeInvalid) {
199311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(1, 2);
200311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
201311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
202311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
203311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
204311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
205311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
206311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
207311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, SourceSegmentEndExceedsDictionarySize) {
208311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 3];  // increment start pos
209311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
210311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
211311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
212311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
213311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
214311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
215311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
216311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, SourceSegmentPosMaxInt) {
217311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(3, 1);
218311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
219311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
220311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
221311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
222311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
223311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
224311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
225311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, SourceSegmentPosNegative) {
226311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(3, 1);
227311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
228311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
229311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
230311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
231311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
232311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
233311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
234311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, SourceSegmentPosInvalid) {
235311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(3, 1);
236311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
237311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
238311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
239311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
240311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
241311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
242311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
243311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthZero) {
244311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 4] = 0;
245311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
246311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
247311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
248311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
249311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
250311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
251311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
252311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthTooLargeByOne) {
253311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 4];
254311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
255311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
256311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
257311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
258311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
259311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
260311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
261311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthTooSmallByOne) {
262311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 4];
263311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
264311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
265311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
266311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
267311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
268311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
269311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
270311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthMaxInt) {
271311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(4, 1);
272311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
273311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
274311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
275311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
276311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
277311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
278311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
279311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthNegative) {
280311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(4, 1);
281311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
282311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
283311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
284311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
285311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
286311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
287311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
288311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthInvalid) {
289311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(4, 1);
290311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
291311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
292311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
293311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
294311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
295311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
296311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
297311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeZero) {
298311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  static const char zero_size[] = { 0x00 };
299311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_.replace(delta_file_header_.size() + 5, 2, zero_size, 1);
300311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
301311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
302311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
303311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
304311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
305311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
306311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
307311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeTooLargeByOne) {
308311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 6];
309311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
310311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
311311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
312311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
313311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
314311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
315311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
316311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeTooSmallByOne) {
317311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 6];
318311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
319311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
320311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
321311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
322311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
323311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
324311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
325311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeMaxInt) {
326311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(5, 2);
327311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
328311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
329311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
330311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
331311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
332311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
333311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
334311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeNegative) {
335311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(5, 2);
336311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
337311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
338311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
339311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
340311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
341311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
342311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
343311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeInvalid) {
344311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(5, 2);
345311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
346311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
347311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
348311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
349311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
350311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
351311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
352311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, OkayToSetUpperBitsOfDeltaIndicator) {
353311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 7] = 0xF8;
354311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
355311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
356311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   delta_file_.size(),
357311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                   &output_));
358311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_TRUE(decoder_.FinishDecoding());
359732fff248e662ec47aa27c124632f406f27b6c8dopenvcdiff@gmail.com  EXPECT_EQ(expected_target_.c_str(), output_);
360311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
361311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
362311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, DataCompressionNotSupported) {
363311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 7] = 0x01;
364311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
365311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
366311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
367311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
368311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
369311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
370311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
371311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, InstructionCompressionNotSupported) {
372311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 7] = 0x02;
373311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
374311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
375311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
376311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
377311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
378311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
379311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
380311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddressCompressionNotSupported) {
381311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 7] = 0x04;
382311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
383311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
384311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
385311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
386311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
387311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
388311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
389311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeZero) {
390311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 8] = 0;
391311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
392311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
393311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
394311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
395311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
396311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
397311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
398311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeTooLargeByOne) {
399311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 8];
400311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
401311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
402311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
403311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
404311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
405311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
406311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
407311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeTooSmallByOne) {
408311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 8];
409311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
410311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
411311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
412311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
413311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
414311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
415311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
416311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeMaxInt) {
417311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(8, 1);
418311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
419311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
420311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
421311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
422311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
423311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
424311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
425311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeNegative) {
426311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(8, 1);
427311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
428311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
429311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
430311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
431311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
432311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
433311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
434311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeInvalid) {
435311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(8, 1);
436311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
437311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
438311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
439311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
440311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
441311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
442311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
443311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, InstructionsSizeZero) {
444311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 9] = 0;
445311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
446311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
447311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
448311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
449311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
450311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
451311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
452311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, InstructionsSizeTooLargeByOne) {
453311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 9];
454311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
455311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
456311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
457311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
458311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
459311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
460311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
461311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, InstructionsSizeTooSmallByOne) {
462311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 9];
463311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
464311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
465311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
466311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
467311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
468311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
469311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
470311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, InstructionsSizeMaxInt) {
471311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(9, 1);
472311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
473311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
474311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
475311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
476311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
477311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
478311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
479311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, InstructionsSizeNegative) {
480311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(9, 1);
481311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
482311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
483311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
484311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
485311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
486311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
487311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
488311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, InstructionsSizeInvalid) {
489311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(9, 1);
490311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
491311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
492311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
493311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
494311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
495311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
496311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
497311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeZero) {
498311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 10] = 0;
499311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
500311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
501311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
502311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
503311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
504311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
505311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
506311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeTooLargeByOne) {
507311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 10];
508311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
509311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
510311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
511311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
512311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
513311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
514311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
515311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeTooSmallByOne) {
516311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 10];
517311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
518311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
519311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
520311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
521311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
522311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
523311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
524311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeMaxInt) {
525311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(10, 1);
526311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
527311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
528311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
529311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
530311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
531311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
532311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
533311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeNegative) {
534311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(10, 1);
535311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
536311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
537311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
538311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
539311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
540311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
541311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
542311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeInvalid) {
543311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(10, 1);
544311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
545311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
546311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
547311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
548311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
549311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
550311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
551311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, InstructionsEndEarly) {
552311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 9];
553311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 10];
554311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
555311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
556311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
557311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
558311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
559311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
560311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
561311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// From this point on, the tests should also be run against the interleaved
562311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// format.
563311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
564311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyMoreThanExpectedTarget) {
565311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x70] =
566311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      FirstByteOfStringLength(kExpectedTarget);
567311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x71] =
568311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      SecondByteOfStringLength(kExpectedTarget) + 1;
569311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
570311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
571311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
572311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
573311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
574311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
575311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
576311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopySizeZero) {
577311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x70] = 0;
578311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
579311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
580311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
581311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
582311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
583311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
584311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
585311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopySizeTooLargeByOne) {
586311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 0x70];
587311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
588311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
589311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
590311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
591311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
592311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
593311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
594311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopySizeTooSmallByOne) {
595311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 0x70];
596311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
597311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
598311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
599311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
600311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
601311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
602311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
603311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopySizeMaxInt) {
604311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(0x70, 1);
605311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
606311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
607311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
608311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
609311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
610311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
611311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
612311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopySizeNegative) {
613311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(0x70, 1);
614311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
615311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
616311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
617311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
618311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
619311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
620311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
621311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopySizeInvalid) {
622311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(0x70, 1);
623311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
624311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
625311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
626311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
627311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
628311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
629311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
630311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressBeyondHereAddress) {
631311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x7B] =
632311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      FirstByteOfStringLength(kDictionary);
633311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x7C] =
634311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      SecondByteOfStringLength(kDictionary);
635311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
636311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
637311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
638311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
639311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
640311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
641311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
642311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressMaxInt) {
643311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(0x7B, 1);
644311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
645311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
646311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
647311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
648311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
649311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
650311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
651311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressNegative) {
652311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(0x70, 1);
653311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
654311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
655311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
656311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
657311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
658311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
659311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
660311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, CopyAddressInvalid) {
661311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(0x70, 1);
662311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
663311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
664311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
665311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
666311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
667311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
668311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
669311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddMoreThanExpectedTarget) {
670311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x72] =
671311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      FirstByteOfStringLength(kExpectedTarget);
672311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x73] =
673311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      SecondByteOfStringLength(kExpectedTarget) + 1;
674311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
675311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
676311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
677311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
678311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
679311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
680311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
681311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddSizeZero) {
682311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x72] = 0;
683311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
684311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
685311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
686311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
687311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
688311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
689311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
690311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddSizeTooLargeByOne) {
691311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 0x72];
692311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
693311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
694311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
695311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
696311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
697311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
698311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
699311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddSizeTooSmallByOne) {
700311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 0x72];
701311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
702311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
703311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
704311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
705311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
706311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
707311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
708311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddSizeMaxInt) {
709311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(0x72, 1);
710311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
711311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
712311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
713311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
714311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
715311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
716311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
717311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddSizeNegative) {
718311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(0x72, 1);
719311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
720311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
721311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
722311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
723311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
724311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
725311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
726311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, AddSizeInvalid) {
727311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(0x72, 1);
728311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
729311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
730311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
731311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
732311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
733311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
734311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
735311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, RunMoreThanExpectedTarget) {
736311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x78] =
737311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      FirstByteOfStringLength(kExpectedTarget);
738311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x79] =
739311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff      SecondByteOfStringLength(kExpectedTarget) + 1;
740311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
741311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
742311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
743311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
744311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
745311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
746311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
747311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, RunSizeZero) {
748311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  delta_file_[delta_file_header_.size() + 0x78] = 0;
749311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
750311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
751311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
752311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
753311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
754311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
755311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
756311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, RunSizeTooLargeByOne) {
757311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  ++delta_file_[delta_file_header_.size() + 0x78];
758311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
759311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
760311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
761311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
762311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
763311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
764311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
765311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, RunSizeTooSmallByOne) {
766311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  --delta_file_[delta_file_header_.size() + 0x78];
767311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
768311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
769311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
770311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
771311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
772311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
773311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
774311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, RunSizeMaxInt) {
775311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteMaxVarintAtOffset(0x78, 1);
776311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
777311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
778311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
779311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
780311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
781311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
782311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
783311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, RunSizeNegative) {
784311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteNegativeVarintAtOffset(0x78, 1);
785311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
786311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
787311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
788311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
789311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
790311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
791311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
792311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffTEST_F(VCDiffStandardDecoderTest, RunSizeInvalid) {
793311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  WriteInvalidVarintAtOffset(0x78, 1);
794311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
795311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
796311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    delta_file_.size(),
797311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff                                    &output_));
798311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff  EXPECT_EQ("", output_);
799311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}
800311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff
801311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}  // namespace open_vcdiff
802