Skip to content

Commit caf4d21

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents e19d099 + b70ce54 commit caf4d21

File tree

5 files changed

+74
-40
lines changed

5 files changed

+74
-40
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cpu.out
2+
brotli.test

brotli_bit_stream.go

Lines changed: 0 additions & 40 deletions
This file was deleted.

brotli_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright 2016 Google Inc. All Rights Reserved.
2+
//
3+
// Distributed under MIT license.
4+
// See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5+
6+
package brotli
7+
8+
import (
9+
"bytes"
10+
"io"
11+
"io/ioutil"
12+
"testing"
13+
)
14+
15+
func Decode(encodedData []byte) ([]byte, error) {
16+
r := NewReader(bytes.NewReader(encodedData))
17+
return ioutil.ReadAll(r)
18+
}
19+
20+
func TestDecodeInvalidInput(t *testing.T) {
21+
content := []byte("---\nthis-is-not-brotli: \"it is actually yaml\"")
22+
input := bytes.NewBuffer(content)
23+
24+
r := NewReader(input)
25+
26+
buf, err := io.ReadAll(r)
27+
if err == nil {
28+
t.Fatalf("expected error, got none and read:\n%x\n%s\n%v", buf, buf, buf)
29+
}
30+
}

constants.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,42 @@ const distanceContextBits = 2
5454
/* Number of slack bytes for window size. Don't confuse
5555
with BROTLI_NUM_DISTANCE_SHORT_CODES. */
5656
const windowGap = 16
57+
58+
/*
59+
Represents the range of values belonging to a prefix code:
60+
61+
[offset, offset + 2^nbits)
62+
*/
63+
type prefixCodeRange struct {
64+
offset uint32
65+
nbits uint32
66+
}
67+
68+
var kBlockLengthPrefixCode = [numBlockLenSymbols]prefixCodeRange{
69+
prefixCodeRange{1, 2},
70+
prefixCodeRange{5, 2},
71+
prefixCodeRange{9, 2},
72+
prefixCodeRange{13, 2},
73+
prefixCodeRange{17, 3},
74+
prefixCodeRange{25, 3},
75+
prefixCodeRange{33, 3},
76+
prefixCodeRange{41, 3},
77+
prefixCodeRange{49, 4},
78+
prefixCodeRange{65, 4},
79+
prefixCodeRange{81, 4},
80+
prefixCodeRange{97, 4},
81+
prefixCodeRange{113, 5},
82+
prefixCodeRange{145, 5},
83+
prefixCodeRange{177, 5},
84+
prefixCodeRange{209, 5},
85+
prefixCodeRange{241, 6},
86+
prefixCodeRange{305, 6},
87+
prefixCodeRange{369, 7},
88+
prefixCodeRange{497, 8},
89+
prefixCodeRange{753, 9},
90+
prefixCodeRange{1265, 10},
91+
prefixCodeRange{2289, 11},
92+
prefixCodeRange{4337, 12},
93+
prefixCodeRange{8433, 13},
94+
prefixCodeRange{16625, 24},
95+
}

reader.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ func (r *Reader) Read(p []byte) (n int, err error) {
4949
if !decoderHasMoreOutput(r) && len(r.in) == 0 {
5050
m, readErr := r.src.Read(r.buf)
5151
if m == 0 {
52+
if readErr == io.EOF && r.state != stateDone {
53+
readErr = io.ErrUnexpectedEOF
54+
}
5255
// If readErr is `nil`, we just proxy underlying stream behavior.
5356
return 0, readErr
5457
}

0 commit comments

Comments
 (0)