Before Go 1.7 there is an extra offset needed to decode blocks correctly

after the embedded compressed data. In post 1.7 this bug was fixed.
We use build tags here to support both cases.
This commit is contained in:
Sascha L. Teichmann 2016-04-08 23:40:36 +02:00
parent 955dfdf4bb
commit b5f531b0ba
3 changed files with 26 additions and 1 deletions

View File

@ -137,7 +137,12 @@ func NewDecodedBlock(data []byte, colors *Colors) (db *DecodedBlock, err error)
return
}
offset += buf.Pos + 4
// There is a bug before Go 1.7 that enforces
// to add 4 as an offset after the compressed
// geometry data. This is resolved via build tags
// and definitions in pre17offset.go and
// post17offset.go.
offset += buf.Pos + afterCompressOfs
buf.Pos = 0
if offset >= dataLen {
return nil, ErrBlockTruncated

10
common/post17offset.go Normal file
View File

@ -0,0 +1,10 @@
// Copyright 2016 by Sascha L. Teichmann
// Use of this source code is governed by the MIT license
// that can be found in the LICENSE file.
// +build go1.7
package common
// afterCompressOfs is not necessary after Go 1.7.
const afterCompressOfs = 0

10
common/pre17offset.go Normal file
View File

@ -0,0 +1,10 @@
// Copyright 2016 by Sascha L. Teichmann
// Use of this source code is governed by the MIT license
// that can be found in the LICENSE file.
// +build !go1.7
package common
// afterCompressOfs is necessary before Go 1.7.
const afterCompressOfs = 4