@@ -78,28 +78,43 @@ func newFrameDec(o decoderOptions) *frameDec {
78
78
func (d * frameDec ) reset (br byteBuffer ) error {
79
79
d .HasCheckSum = false
80
80
d .WindowSize = 0
81
- var b [ ]byte
81
+ var signature [ 4 ]byte
82
82
for {
83
83
var err error
84
- b , err = br .readSmall (4 )
84
+ // Check if we can read more...
85
+ b , err := br .readSmall (1 )
85
86
switch err {
86
87
case io .EOF , io .ErrUnexpectedEOF :
87
88
return io .EOF
88
89
default :
89
90
return err
90
91
case nil :
92
+ signature [0 ] = b [0 ]
93
+ }
94
+ // Read the rest, don't allow io.ErrUnexpectedEOF
95
+ b , err = br .readSmall (3 )
96
+ switch err {
97
+ case io .EOF :
98
+ return io .EOF
99
+ default :
100
+ return err
101
+ case nil :
102
+ copy (signature [1 :], b )
91
103
}
92
- if ! bytes .Equal (b [1 :4 ], skippableFrameMagic ) || b [0 ]& 0xf0 != 0x50 {
104
+
105
+ if ! bytes .Equal (signature [1 :4 ], skippableFrameMagic ) || signature [0 ]& 0xf0 != 0x50 {
93
106
if debugDecoder {
94
- println ("Not skippable" , hex .EncodeToString (b ), hex .EncodeToString (skippableFrameMagic ))
107
+ println ("Not skippable" , hex .EncodeToString (signature [:] ), hex .EncodeToString (skippableFrameMagic ))
95
108
}
96
109
// Break if not skippable frame.
97
110
break
98
111
}
99
112
// Read size to skip
100
113
b , err = br .readSmall (4 )
101
114
if err != nil {
102
- println ("Reading Frame Size" , err )
115
+ if debugDecoder {
116
+ println ("Reading Frame Size" , err )
117
+ }
103
118
return err
104
119
}
105
120
n := uint32 (b [0 ]) | (uint32 (b [1 ]) << 8 ) | (uint32 (b [2 ]) << 16 ) | (uint32 (b [3 ]) << 24 )
@@ -112,15 +127,19 @@ func (d *frameDec) reset(br byteBuffer) error {
112
127
return err
113
128
}
114
129
}
115
- if ! bytes .Equal (b , frameMagic ) {
116
- println ("Got magic numbers: " , b , "want:" , frameMagic )
130
+ if ! bytes .Equal (signature [:], frameMagic ) {
131
+ if debugDecoder {
132
+ println ("Got magic numbers: " , signature , "want:" , frameMagic )
133
+ }
117
134
return ErrMagicMismatch
118
135
}
119
136
120
137
// Read Frame_Header_Descriptor
121
138
fhd , err := br .readByte ()
122
139
if err != nil {
123
- println ("Reading Frame_Header_Descriptor" , err )
140
+ if debugDecoder {
141
+ println ("Reading Frame_Header_Descriptor" , err )
142
+ }
124
143
return err
125
144
}
126
145
d .SingleSegment = fhd & (1 << 5 ) != 0
@@ -135,7 +154,9 @@ func (d *frameDec) reset(br byteBuffer) error {
135
154
if ! d .SingleSegment {
136
155
wd , err := br .readByte ()
137
156
if err != nil {
138
- println ("Reading Window_Descriptor" , err )
157
+ if debugDecoder {
158
+ println ("Reading Window_Descriptor" , err )
159
+ }
139
160
return err
140
161
}
141
162
printf ("raw: %x, mantissa: %d, exponent: %d\n " , wd , wd & 7 , wd >> 3 )
@@ -153,7 +174,7 @@ func (d *frameDec) reset(br byteBuffer) error {
153
174
size = 4
154
175
}
155
176
156
- b , err = br .readSmall (int (size ))
177
+ b , err : = br .readSmall (int (size ))
157
178
if err != nil {
158
179
println ("Reading Dictionary_ID" , err )
159
180
return err
@@ -191,7 +212,7 @@ func (d *frameDec) reset(br byteBuffer) error {
191
212
}
192
213
d .FrameContentSize = 0
193
214
if fcsSize > 0 {
194
- b , err = br .readSmall (fcsSize )
215
+ b , err : = br .readSmall (fcsSize )
195
216
if err != nil {
196
217
println ("Reading Frame content" , err )
197
218
return err
0 commit comments