Skip to content

Commit 0aa3b65

Browse files
authored
Fix win_indicator parser to accept zero (compressed by itself) (#7)
1 parent fb9d93e commit 0aa3b65

4 files changed

Lines changed: 39 additions & 0 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Security.Cryptography;
5+
using System.Text;
6+
using VCDiff.Decoders;
7+
using VCDiff.Includes;
8+
using Xunit;
9+
10+
namespace VCDiff.Tests
11+
{
12+
public class WindowDecoderTests
13+
{
14+
[Fact]
15+
public void WinIndicator_Zero()
16+
{
17+
var inputStream = File.OpenRead($"patches{Path.DirectorySeparatorChar}empty.test");
18+
var targetStream = File.OpenRead($"patches{Path.DirectorySeparatorChar}win_indicator_zero.test");
19+
var deltaStream = File.OpenRead($"patches{Path.DirectorySeparatorChar}win_indicator_zero.xdelta");
20+
using var md5 = MD5.Create();
21+
targetStream.Position = 0;
22+
var originalHash = md5.ComputeHash(targetStream);
23+
24+
using var outputStream = new MemoryStream();
25+
26+
var decoder = new VcDecoder(inputStream, deltaStream, outputStream);
27+
Assert.Equal(VCDiffResult.SUCCESS, decoder.Decode(out long bytesWritten));
28+
outputStream.Position = 0;
29+
var outputHash = md5.ComputeHash(outputStream);
30+
Assert.Equal(originalHash, outputHash);
31+
}
32+
}
33+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ABCDABCDABCDDDDDDDDDD
26 Bytes
Binary file not shown.

src/VCDiff/Decoders/WindowDecoder.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,11 @@ private bool ParseWindowIndicatorAndSegment(long dictionarySize, long decodedTar
286286

287287
switch (sourceFlags)
288288
{
289+
case 0:
290+
sourceSegmentPosition = 0;
291+
sourceSegmentLength = 0;
292+
return true;
293+
289294
case (int)VCDiffWindowFlags.VCDSOURCE:
290295
return ParseSourceSegmentLengthAndPosition(dictionarySize, out sourceSegmentLength, out sourceSegmentPosition);
291296

0 commit comments

Comments
 (0)