1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright 2008 Google Inc. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Author: Lincoln Smith 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Licensed under the Apache License, Version 2.0 (the "License"); 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// you may not use this file except in compliance with the License. 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// You may obtain a copy of the License at 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// http://www.apache.org/licenses/LICENSE-2.0 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Unless required by applicable law or agreed to in writing, software 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// distributed under the License is distributed on an "AS IS" BASIS, 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// See the License for the specific language governing permissions and 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// limitations under the License. 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <config.h> 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "google/vcdecoder.h" 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <string> 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing.h" 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "vcdecoder_test.h" 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "vcdiff_defs.h" 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace open_vcdiff { 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, DecodeHeaderOnly) { 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.DecodeChunk(delta_file_header_.data(), 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_header_.size(), 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.FinishDecoding()); 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, Decode) { 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(), 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.FinishDecoding()); 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(expected_target_, output_); 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// If we add a checksum to a standard-format delta file (without using format 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// extensions), it will be interpreted as random bytes inserted into the middle 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// of the file. The decode operation should fail, but where exactly it fails is 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// not easy to predict. 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, StandardFormatDoesNotSupportChecksum) { 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ComputeAndAddChecksum(); 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott InitializeDeltaFile(); 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Remove one byte from the length of the chunk to process, and 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// verify that an error is returned for FinishDecoding(). 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, FinishAfterDecodingPartialWindow) { 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(), 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size() - 1, 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.FinishDecoding()); 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The decoder should not create more target bytes than were expected. 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_GE(expected_target_.size(), output_.size()); 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, FinishAfterDecodingPartialWindowHeader) { 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(), 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_header_.size() 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott + delta_window_header_.size() - 1, 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.FinishDecoding()); 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetMatchesWindowSizeLimit) { 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.SetMaximumTargetWindowSize(expected_target_.size()); 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(), 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.FinishDecoding()); 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(expected_target_, output_); 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetMatchesFileSizeLimit) { 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.SetMaximumTargetFileSize(expected_target_.size()); 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(), 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.FinishDecoding()); 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(expected_target_, output_); 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetExceedsWindowSizeLimit) { 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.SetMaximumTargetWindowSize(expected_target_.size() - 1); 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetExceedsFileSizeLimit) { 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.SetMaximumTargetFileSize(expected_target_.size() - 1); 110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Fuzz bits to make sure decoder does not violently crash. 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This test has no expected behavior except that no crashes should occur. 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// In some cases, changing bits will still decode to the correct target; 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// for example, changing unused bits within a bitfield. 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, FuzzBits) { 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott while (FuzzOneByteInDeltaFile()) { 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (decoder_.DecodeChunk(delta_file_.data(), 125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)) { 127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.FinishDecoding(); 128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott InitializeDeltaFile(); 130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott output_.clear(); 131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Change each element of the delta file window to an erroneous value 135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// and make sure it's caught as an error. 136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, WinIndicatorHasBothSourceAndTarget) { 138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size()] = VCD_SOURCE + VCD_TARGET; 139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, OkayToSetUpperBitsOfWinIndicator) { 147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // It is not an error to set any of the other bits in Win_Indicator 148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // besides VCD_SOURCE and VCD_TARGET. 149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size()] = 0xFD; 150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(), 152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.FinishDecoding()); 155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(expected_target_, output_); 156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyInstructionsShouldFailIfNoSourceSegment) { 159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Replace the Win_Indicator and the source size and source offset with a 160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // single 0 byte (a Win_Indicator for a window with no source segment.) 161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_window_header_.replace(0, 4, "\0", 1); 162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott InitializeDeltaFile(); 163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 164c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The first COPY instruction should fail, so there should be no output 168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 170c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, SourceSegmentSizeExceedsDictionarySize) { 172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 2]; // increment size 173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 180c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, SourceSegmentSizeMaxInt) { 181c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(1, 2); 182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 187c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 188c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, SourceSegmentSizeNegative) { 190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(1, 2); 191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 196c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 197c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, SourceSegmentSizeInvalid) { 199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(1, 2); 200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 206c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 207c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, SourceSegmentEndExceedsDictionarySize) { 208c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 3]; // increment start pos 209c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 210c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 211c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 212c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 213c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 214c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 215c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 216c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, SourceSegmentPosMaxInt) { 217c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(3, 1); 218c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 219c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 220c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 221c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 222c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 223c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 224c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 225c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, SourceSegmentPosNegative) { 226c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(3, 1); 227c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 228c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 229c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 230c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 231c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 232c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 233c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 234c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, SourceSegmentPosInvalid) { 235c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(3, 1); 236c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 237c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 238c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 239c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 240c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 241c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 242c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 243c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthZero) { 244c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 4] = 0; 245c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 246c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 247c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 248c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 249c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 250c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 251c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 252c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthTooLargeByOne) { 253c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 4]; 254c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 255c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 256c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 257c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 258c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 259c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 260c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 261c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthTooSmallByOne) { 262c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 4]; 263c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 264c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 265c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 266c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 267c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 268c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 269c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 270c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthMaxInt) { 271c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(4, 1); 272c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 273c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 274c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 275c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 276c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 277c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 278c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 279c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthNegative) { 280c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(4, 1); 281c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 282c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 283c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 284c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 285c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 286c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 287c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 288c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, DeltaEncodingLengthInvalid) { 289c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(4, 1); 290c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 291c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 292c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 293c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 294c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 295c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 296c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 297c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeZero) { 298c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott static const char zero_size[] = { 0x00 }; 299c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.replace(delta_file_header_.size() + 5, 2, zero_size, 1); 300c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 301c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 302c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 303c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 304c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 305c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 306c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 307c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeTooLargeByOne) { 308c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 6]; 309c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 310c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 311c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 312c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 313c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 314c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 315c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 316c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeTooSmallByOne) { 317c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 6]; 318c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 319c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 320c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 321c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 322c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 323c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 324c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 325c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeMaxInt) { 326c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(5, 2); 327c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 328c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 329c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 330c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 331c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 332c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 333c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 334c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeNegative) { 335c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(5, 2); 336c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 337c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 338c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 339c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 340c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 341c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 342c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 343c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, TargetWindowSizeInvalid) { 344c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(5, 2); 345c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 346c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 347c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 348c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 349c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 350c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 351c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 352c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, OkayToSetUpperBitsOfDeltaIndicator) { 353c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 7] = 0xF8; 354c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 355c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(), 356c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 357c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 358c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_TRUE(decoder_.FinishDecoding()); 359c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ(expected_target_, output_); 360c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 361c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 362c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, DataCompressionNotSupported) { 363c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 7] = 0x01; 364c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 365c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 366c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 367c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 368c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 369c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 370c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 371c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, InstructionCompressionNotSupported) { 372c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 7] = 0x02; 373c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 374c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 375c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 376c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 377c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 378c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 379c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 380c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddressCompressionNotSupported) { 381c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 7] = 0x04; 382c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 383c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 384c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 385c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 386c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 387c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 388c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 389c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeZero) { 390c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 8] = 0; 391c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 392c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 393c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 394c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 395c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 396c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 397c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 398c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeTooLargeByOne) { 399c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 8]; 400c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 401c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 402c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 403c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 404c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 405c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 406c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 407c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeTooSmallByOne) { 408c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 8]; 409c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 410c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 411c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 412c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 413c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 414c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 415c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 416c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeMaxInt) { 417c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(8, 1); 418c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 419c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 420c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 421c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 422c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 423c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 424c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 425c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeNegative) { 426c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(8, 1); 427c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 428c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 429c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 430c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 431c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 432c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 433c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 434c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddRunDataSizeInvalid) { 435c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(8, 1); 436c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 437c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 438c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 439c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 440c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 441c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 442c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 443c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, InstructionsSizeZero) { 444c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 9] = 0; 445c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 446c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 447c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 448c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 449c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 450c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 451c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 452c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, InstructionsSizeTooLargeByOne) { 453c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 9]; 454c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 455c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 456c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 457c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 458c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 459c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 460c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 461c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, InstructionsSizeTooSmallByOne) { 462c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 9]; 463c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 464c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 465c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 466c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 467c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 468c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 469c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 470c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, InstructionsSizeMaxInt) { 471c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(9, 1); 472c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 473c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 474c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 475c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 476c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 477c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 478c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 479c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, InstructionsSizeNegative) { 480c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(9, 1); 481c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 482c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 483c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 484c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 485c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 486c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 487c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 488c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, InstructionsSizeInvalid) { 489c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(9, 1); 490c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 491c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 492c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 493c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 494c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 495c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 496c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 497c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeZero) { 498c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 10] = 0; 499c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 500c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 501c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 502c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 503c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 504c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 505c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 506c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeTooLargeByOne) { 507c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 10]; 508c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 509c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 510c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 511c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 512c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 513c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 514c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 515c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeTooSmallByOne) { 516c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 10]; 517c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 518c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 519c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 520c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 521c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 522c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 523c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 524c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeMaxInt) { 525c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(10, 1); 526c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 527c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 528c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 529c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 530c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 531c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 532c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 533c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeNegative) { 534c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(10, 1); 535c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 536c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 537c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 538c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 539c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 540c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 541c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 542c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressSizeInvalid) { 543c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(10, 1); 544c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 545c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 546c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 547c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 548c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 549c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 550c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 551c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, InstructionsEndEarly) { 552c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 9]; 553c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 10]; 554c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 555c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 556c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 557c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 558c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 559c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 560c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 561c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// From this point on, the tests should also be run against the interleaved 562c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// format. 563c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 564c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyMoreThanExpectedTarget) { 565c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x70] = 566c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FirstByteOfStringLength(kExpectedTarget); 567c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x71] = 568c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SecondByteOfStringLength(kExpectedTarget) + 1; 569c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 570c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 571c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 572c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 573c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 574c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 575c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 576c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopySizeZero) { 577c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x70] = 0; 578c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 579c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 580c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 581c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 582c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 583c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 584c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 585c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopySizeTooLargeByOne) { 586c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 0x70]; 587c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 588c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 589c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 590c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 591c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 592c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 593c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 594c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopySizeTooSmallByOne) { 595c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 0x70]; 596c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 597c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 598c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 599c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 600c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 601c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 602c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 603c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopySizeMaxInt) { 604c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(0x70, 1); 605c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 606c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 607c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 608c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 609c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 610c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 611c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 612c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopySizeNegative) { 613c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(0x70, 1); 614c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 615c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 616c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 617c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 618c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 619c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 620c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 621c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopySizeInvalid) { 622c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(0x70, 1); 623c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 624c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 625c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 626c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 627c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 628c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 629c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 630c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressBeyondHereAddress) { 631c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x7B] = 632c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FirstByteOfStringLength(kDictionary); 633c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x7C] = 634c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SecondByteOfStringLength(kDictionary); 635c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 636c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 637c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 638c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 639c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 640c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 641c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 642c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressMaxInt) { 643c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(0x7B, 1); 644c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 645c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 646c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 647c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 648c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 649c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 650c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 651c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressNegative) { 652c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(0x70, 1); 653c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 654c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 655c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 656c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 657c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 658c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 659c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 660c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, CopyAddressInvalid) { 661c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(0x70, 1); 662c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 663c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 664c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 665c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 666c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 667c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 668c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 669c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddMoreThanExpectedTarget) { 670c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x72] = 671c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FirstByteOfStringLength(kExpectedTarget); 672c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x73] = 673c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SecondByteOfStringLength(kExpectedTarget) + 1; 674c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 675c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 676c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 677c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 678c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 679c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 680c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 681c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddSizeZero) { 682c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x72] = 0; 683c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 684c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 685c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 686c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 687c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 688c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 689c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 690c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddSizeTooLargeByOne) { 691c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 0x72]; 692c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 693c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 694c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 695c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 696c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 697c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 698c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 699c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddSizeTooSmallByOne) { 700c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 0x72]; 701c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 702c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 703c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 704c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 705c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 706c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 707c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 708c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddSizeMaxInt) { 709c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(0x72, 1); 710c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 711c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 712c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 713c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 714c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 715c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 716c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 717c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddSizeNegative) { 718c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(0x72, 1); 719c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 720c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 721c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 722c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 723c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 724c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 725c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 726c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, AddSizeInvalid) { 727c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(0x72, 1); 728c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 729c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 730c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 731c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 732c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 733c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 734c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 735c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, RunMoreThanExpectedTarget) { 736c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x78] = 737c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FirstByteOfStringLength(kExpectedTarget); 738c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x79] = 739c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SecondByteOfStringLength(kExpectedTarget) + 1; 740c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 741c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 742c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 743c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 744c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 745c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 746c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 747c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, RunSizeZero) { 748c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_[delta_file_header_.size() + 0x78] = 0; 749c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 750c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 751c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 752c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 753c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 754c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 755c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 756c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, RunSizeTooLargeByOne) { 757c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ++delta_file_[delta_file_header_.size() + 0x78]; 758c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 759c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 760c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 761c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 762c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 763c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 764c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 765c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, RunSizeTooSmallByOne) { 766c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott --delta_file_[delta_file_header_.size() + 0x78]; 767c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 768c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 769c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 770c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 771c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 772c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 773c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 774c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, RunSizeMaxInt) { 775c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteMaxVarintAtOffset(0x78, 1); 776c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 777c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 778c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 779c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 780c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 781c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 782c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 783c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, RunSizeNegative) { 784c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteNegativeVarintAtOffset(0x78, 1); 785c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 786c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 787c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 788c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 789c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 790c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 791c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 792c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(VCDiffStandardDecoderTest, RunSizeInvalid) { 793c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott WriteInvalidVarintAtOffset(0x78, 1); 794c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott decoder_.StartDecoding(dictionary_.data(), dictionary_.size()); 795c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(), 796c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delta_file_.size(), 797c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott &output_)); 798c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EXPECT_EQ("", output_); 799c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 800c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 801c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace open_vcdiff 802