tiff: format the find/replace test strings consistently.
Change-Id: Id3222a76702e8f2017aec77a25df715ef378c8ef Reviewed-on: https://go-review.googlesource.com/11224 Reviewed-by: Nigel Tao <nigeltao@golang.org>
This commit is contained in:
parent
b7cdfbb5c4
commit
e5f3f2f6c0
|
@ -7,6 +7,8 @@ package tiff
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
"image"
|
"image"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
@ -211,40 +213,71 @@ func TestDecompress(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func replace(src []byte, find, repl string) ([]byte, error) {
|
||||||
|
removeSpaces := func(r rune) rune {
|
||||||
|
if r != ' ' {
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := hex.DecodeString(strings.Map(removeSpaces, find))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r, err := hex.DecodeString(strings.Map(removeSpaces, repl))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
dst := bytes.Replace(src, f, r, 1)
|
||||||
|
if bytes.Equal(dst, src) {
|
||||||
|
return nil, errors.New("replacement failed")
|
||||||
|
}
|
||||||
|
return dst, nil
|
||||||
|
}
|
||||||
|
|
||||||
// TestTileTooBig checks that we do not panic when a tile is too big compared
|
// TestTileTooBig checks that we do not panic when a tile is too big compared
|
||||||
// to the data available.
|
// to the data available.
|
||||||
// Issue 10712
|
// Issue 10712
|
||||||
func TestTileTooBig(t *testing.T) {
|
func TestTileTooBig(t *testing.T) {
|
||||||
contents, err := ioutil.ReadFile(testdataDir + "video-001-tile-64x64.tiff")
|
b0, err := ioutil.ReadFile(testdataDir + "video-001-tile-64x64.tiff")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mutate the loaded image to have the problem.
|
// Mutate the loaded image to have the problem.
|
||||||
//
|
//
|
||||||
// 0x42 01: tag number (tTileWidth)
|
// 42 01: tag number (tTileWidth)
|
||||||
// 03 00: data type (short, or uint16)
|
// 03 00: data type (short, or uint16)
|
||||||
// 01 00 00 00: count
|
// 01 00 00 00: count
|
||||||
// xx 00 00 00: value (0x40 -> 0x44: a wider tile consumes more data
|
// xx 00 00 00: value (0x40 -> 0x44: a wider tile consumes more data
|
||||||
// than is available)
|
// than is available)
|
||||||
find := []byte{0x42, 0x01, 3, 0, 1, 0, 0, 0, 0x40, 0, 0, 0}
|
b1, err := replace(b0,
|
||||||
repl := []byte{0x42, 0x01, 3, 0, 1, 0, 0, 0, 0x44, 0, 0, 0}
|
"42 01 03 00 01 00 00 00 40 00 00 00",
|
||||||
contents = bytes.Replace(contents, find, repl, 1)
|
"42 01 03 00 01 00 00 00 44 00 00 00",
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
// Turn off the predictor, which makes it possible to hit the
|
// Turn off the predictor, which makes it possible to hit the
|
||||||
// place with the defect. Without this patch to the image, we run
|
// place with the defect. Without this patch to the image, we run
|
||||||
// out of data too early, and do not hit the part of the code where
|
// out of data too early, and do not hit the part of the code where
|
||||||
// the original panic was.
|
// the original panic was.
|
||||||
//
|
//
|
||||||
// 42 01: tag number (tPredictor)
|
// 3d 01: tag number (tPredictor)
|
||||||
// 03 00: data type (short, or uint16)
|
// 03 00: data type (short, or uint16)
|
||||||
// 01 00 00 00: count
|
// 01 00 00 00: count
|
||||||
// xx 00 00 00: value (2 -> 1: 2 = horizontal, 1 = none)
|
// xx 00 00 00: value (2 -> 1: 2 = horizontal, 1 = none)
|
||||||
find = []byte{0x3d, 0x01, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0}
|
b2, err := replace(b1,
|
||||||
repl = []byte{0x3d, 0x01, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0}
|
"3d 01 03 00 01 00 00 00 02 00 00 00",
|
||||||
contents = bytes.Replace(contents, find, repl, 1)
|
"3d 01 03 00 01 00 00 00 01 00 00 00",
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
_, err = Decode(bytes.NewReader(contents))
|
_, err = Decode(bytes.NewReader(b2))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("did not expect nil error")
|
t.Fatal("did not expect nil error")
|
||||||
}
|
}
|
||||||
|
@ -297,7 +330,7 @@ func TestLargeIFDEntry(t *testing.T) {
|
||||||
// TestZeroBitsPerSample verifies that an IFD with a bitsPerSample of 0 does not cause a crash.
|
// TestZeroBitsPerSample verifies that an IFD with a bitsPerSample of 0 does not cause a crash.
|
||||||
// Issue 10711.
|
// Issue 10711.
|
||||||
func TestZeroBitsPerSample(t *testing.T) {
|
func TestZeroBitsPerSample(t *testing.T) {
|
||||||
contents, err := ioutil.ReadFile(testdataDir + "bw-deflate.tiff")
|
b0, err := ioutil.ReadFile(testdataDir + "bw-deflate.tiff")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -307,11 +340,15 @@ func TestZeroBitsPerSample(t *testing.T) {
|
||||||
// 03 00: data type (short, or uint16)
|
// 03 00: data type (short, or uint16)
|
||||||
// 01 00 00 00: count
|
// 01 00 00 00: count
|
||||||
// ?? 00 00 00: value (1 -> 0)
|
// ?? 00 00 00: value (1 -> 0)
|
||||||
find := []byte{2, 1, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0}
|
b1, err := replace(b0,
|
||||||
repl := []byte{2, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0}
|
"02 01 03 00 01 00 00 00 01 00 00 00",
|
||||||
contents = bytes.Replace(contents, find, repl, 1)
|
"02 01 03 00 01 00 00 00 00 00 00 00",
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
_, err = Decode(bytes.NewReader(contents))
|
_, err = Decode(bytes.NewReader(b1))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("Decode with 0 bits per sample: got nil error, want non-nil")
|
t.Fatal("Decode with 0 bits per sample: got nil error, want non-nil")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user