Skip to content

Commit fdb4cd4

Browse files
authored
Merge pull request #76 from shogo82148/introduce-fuzz-testing
Introduce fuzz testing
2 parents 2880ca0 + 31f6539 commit fdb4cd4

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

common.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ func (pool *ResStringPool) GetString(ref ResStringPoolRef) string {
122122

123123
// HasString returns whether the pool contains ref.
124124
func (pool *ResStringPool) HasString(ref ResStringPoolRef) bool {
125+
if pool == nil {
126+
return false
127+
}
125128
return int(ref) >= 0 && int(ref) < len(pool.Strings)
126129
}
127130

fuzz_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//go:build go1.18
2+
// +build go1.18
3+
4+
package androidbinary
5+
6+
import (
7+
"bytes"
8+
"os"
9+
"testing"
10+
)
11+
12+
func FuzzNewXMLFile(f *testing.F) {
13+
data, err := os.ReadFile("testdata/AndroidManifest.xml")
14+
if err != nil {
15+
f.Fatal(err)
16+
}
17+
f.Add(data)
18+
19+
f.Fuzz(func(t *testing.T, data []byte) {
20+
_, err := NewXMLFile(bytes.NewReader(data))
21+
if err != nil {
22+
t.Skip(err)
23+
}
24+
})
25+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
go test fuzz v1
2+
[]byte("00\x1e\x0000000000000000000000000000\x02\x01\x00\x000000000000000000")
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
go test fuzz v1
2+
[]byte("\x03\x00\b\x00T\v\x00\x00\x01\x00\x1c\x00\x94\x05\x00\x00\"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x004\x00\x00\x00@\x00\x00\x00N\x00\x00\x00Z\x00\x00\x00r\x00\x00\x00\x98\x00\x00\x00\xaa\x00\x00\x00\x02\x01\x00\x00\x06\x01\x00\x00\x18\x01\x00\x00,\x01\x00\x00h\x01\x00\x00t\x01\x00\x00\x96\x01\x00\x00\xcc\x01\x00\x00\b\x02\x00\x00Z\x02\x00\x00\x94\x02\x00\x00\xe6\x02\x00\x00(\x03\x00\x00B\x03\x00\x00^\x03\x00\x00\x90\x03\x00\x00\xa4\x03\x00\x00\xca\x03\x00\x00\xe8\x03\x00\x00\xf8\x03\x00\x000\x04\x00\x00D\x04\x00\x00\x88\x04\x00\x00\xa2\x04\x00\x00\xc4\x04\x00\x00\v\x00v\x00e\x00r\x00s\x00i\x00o\x00n\x00N\x00a\x00m\x00e\x00\x00\x00\v\x00v\x00e\x00r\x00s\x00i\x00o\x00n\x00C\x00o\x00d\x00e\x00\x00\x00\x04\x00n\x00a\x00m\x00e\x00\x00\x00\x05\x00l\x00a\x00b\x00e\x00l\x00\x00\x00\x04\x00i\x00c\x00o\x00n\x00\x00\x00\n\x00d\x00e\x00b\x00u\x00g\x00g\x00a\x00b\x00l\x00e\x00\x00\x00\x11\x00s\x00c\x00r\x00e\x00e\x00n\x00O\x00r\x00i\x00e\x00n\x00t\x00a\x00t\x00i\x00o\x00n\x00\x00\x00\a\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00\x00\x00*\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00s\x00c\x00h\x00e\x00m\x00a\x00s\x00.\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00c\x00o\x00m\x00/\x00a\x00p\x00k\x00/\x00r\x00e\x00s\x00/\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00\x00\x00\x00\x00\x00\x00\a\x00p\x00a\x00c\x00k\x00a\x00g\x00e\x00\x00\x00\b\x00m\x00a\x00n\x00i\x00f\x00e\x00s\x00t\x00\x00\x00\x1c\x00n\x00e\x00t\x00.\x00s\x00o\x00r\x00a\x00b\x00l\x00u\x00e\x00.\x00s\x00h\x00o\x00g\x00o\x00.\x00F\x00W\x00M\x00e\x00a\x00s\x00u\x00r\x00e\x00\x00\x00\x04\x00\xc60\xb90\xc80Hr\x00\x00\x0f\x00u\x00s\x00e\x00s\x00-\x00p\x00e\x00r\x00m\x00i\x00s\x00s\x00i\x00o\x00n\x00\x00\x00\x19\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00p\x00e\x00r\x00m\x00i\x00s\x00s\x00i\x00o\x00n\x00.\x00C\x00A\x00M\x00E\x00R\x00A\x00\x00\x00\x1c\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00p\x00e\x00r\x00m\x00i\x00s\x00s\x00i\x00o\x00n\x00.\x00W\x00A\x00K\x00E\x00_\x00L\x00O\x00C\x00K\x00\x00\x00'\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00p\x00e\x00r\x00m\x00i\x00s\x00s\x00i\x00o\x00n\x00.\x00A\x00C\x00C\x00E\x00S\x00S\x00_\x00F\x00I\x00N\x00E\x00_\x00L\x00O\x00C\x00A\x00T\x00I\x00O\x00N\x00\x00\x00\x1b\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00p\x00e\x00r\x00m\x00i\x00s\x00s\x00i\x00o\x00n\x00.\x00I\x00N\x00T\x00E\x00R\x00N\x00E\x00T\x00\x00\x00'\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00p\x00e\x00r\x00m\x00i\x00s\x00s\x00i\x00o\x00n\x00.\x00A\x00C\x00C\x00E\x00S\x00S\x00_\x00M\x00O\x00C\x00K\x00_\x00L\x00O\x00C\x00A\x00T\x00I\x00O\x00N\x00\x00\x00\x1f\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00p\x00e\x00r\x00m\x00i\x00s\x00s\x00i\x00o\x00n\x00.\x00R\x00E\x00C\x00O\x00R\x00D\x00_\x00A\x00U\x00D\x00I\x00O\x00\x00\x00\v\x00a\x00p\x00p\x00l\x00i\x00c\x00a\x00t\x00i\x00o\x00n\x00\x00\x00\f\x00u\x00s\x00e\x00s\x00-\x00l\x00i\x00b\x00r\x00a\x00r\x00y\x00\x00\x00\x17\x00c\x00o\x00m\x00.\x00g\x00o\x00o\x00g\x00l\x00e\x00.\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00m\x00a\x00p\x00s\x00\x00\x00\b\x00a\x00c\x00t\x00i\x00v\x00i\x00t\x00y\x00\x00\x00\x11\x00F\x00W\x00M\x00e\x00a\x00s\x00u\x00r\x00e\x00A\x00c\x00t\x00i\x00v\x00i\x00t\x00y\x00\x00\x00\r\x00i\x00n\x00t\x00e\x00n\x00t\x00-\x00f\x00i\x00l\x00t\x00e\x00r\x00\x00\x00\x06\x00a\x00c\x00t\x00i\x00o\x00n\x00\x00\x00\x1a\x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00i\x00n\x00t\x00e\x00n\x00t\x00.\x00a\x00c\x00t\x00i\x00o\x00n\x00.\x00M\x00A\x00I\x00N\x00\x00\x00\b\x00c\x00a\x00t\x00e\x00g\x00o\x00r\x00y\x00\x00\x00 \x00a\x00n\x00d\x00r\x00o\x00i\x00d\x00.\x00i\x00n\x00t\x00e\x00n\x00t\x00.\x00c\x00a\x00t\x00e\x00g\x00o\x00r\x00y\x00.\x00L\x00A\x00U\x00N\x00C\x00H\x00E\x00R\x00\x00\x00\v\x00M\x00a\x00p\x00A\x00c\x00t\x00i\x00v\x00i\x00t\x00y\x00\x00\x00\x0f\x00S\x00e\x00t\x00t\x00i\x00n\x00g\x00A\x00c\x00t\x00i\x00v\x00i\x00t\x00y\x00\x00\x00\x14\x00P\x00l\x00a\x00c\x00e\x00S\x00e\x00t\x00t\x00i\x00n\x00g\x00A\x00c\x00t\x00i\x00v\x00i\x00t\x00y\x00\x00\x00\x80\x01\b\x00$\x00\x00\x00\x1c\x02\x01\x01\x1b\x02\x01\x01\x03\x00\x01\x01\x01\x00\x01\x01\x02\x00\x01\x01\x0f\x00\x01\x01\x1e\x00\x01\x01\x00\x01\x10\x00\x18\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\a\x00\x00\x00\b\x00\x00\x00\x02\x01\x10\x00`\x00\x00\x00\x02\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\v\x00\x00\x00\x14\x00\x14\x00\x03\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x01\x00\x00\x00\xff\xff\xff\xff\b\x00\x00\x10\x01\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\r\x00\x00\x00\b\x00\x00\x03\r\x00\x00\x00\xff\xff\xff\xff\n\x00\x00\x00\f\x00\x00\x00\b\x00\x00\x03\f\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\b\x00\x00\x03\x0f\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x10\x00\x00\x00\b\x00\x00\x03\x10\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\x06\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\b\x00\x00\x03\x11\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x06\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\a\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x12\x00\x00\x00\b\x00\x00\x03\x12\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\a\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x13\x00\x00\x00\b\x00\x00\x03\x13\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\t\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x14\x00\x00\x00\b\x00\x00\x03\x14\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\t\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0e\x00\x00\x00\x02\x01\x10\x00`\x00\x00\x00\v\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x00\x00\x14\x00\x14\x00\x03\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x03\x00\x00\x00\xff\xff\xff\xff\b\x00\x00\x01\x00\x00\x04\x7f\b\x00\x00\x00\x04\x00\x00\x00\xff\xff\xff\xff\b\x00\x00\x01\x00\x00\x02\x7f\b\x00\x00\x00\x05\x00\x00\x00\xff\xff\xff\xff\b)\x19\xff#&\xc4\x0f\xc4\x00\x00\x12\x00\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\f\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x17\x00\x00\x00\b\x00\x00\x03\x17\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\f\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x00\x00\x02\x01\x10\x00L\x00\x00\x00\r\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x00\x00\x14\x00\x14\x00\x02\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x19\x00\x00\x00\b\x00\x00\x03\x19\x00\x00\x00\b\x00\x00\x00\x06\x00\x00\x00\xff\xff\xff\xff\b\x00\x00\x10\x00\x00\x00\x00\x02\x01\x10\x00$\x00\x00\x00\x0f\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x00\x00\x14\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\x10\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x1c\x00\x00\x00\b\x00\x00\x03\x1c\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x10\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\x11\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x1e\x00\x00\x00\b\x00\x00\x03\x1e\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x11\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x12\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x13\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x00\x00\x02\x01\x10\x00L\x00\x00\x00\x14\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x00\x00\x14\x00\x14\x00\x02\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00\x1f\x00\x00\x00\b\x00\x00\x03\x1f\x00\x00\x00\b\x00\x00\x00\x06\x00\x00\x00\xff\xff\xff\xff\b\x00\x00\x10\x00\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x15\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\x16\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00 \x00\x00\x00\b\x00\x00\x03 \x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x17\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x00\x00\x02\x01\x10\x008\x00\x00\x00\x18\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x00\x00\x14\x00\x14\x00\x01\x00\x00\x00\x00\x00\x00\x00\b\x00\x00\x00\x02\x00\x00\x00!\x00\x00\x00\b\x00\x00\x03!\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x19\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x1a\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x00\x00\x03\x01\x10\x00\x18\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\v\x00\x00\x00\x01\x01\x10\x00\x18\x00\x00\x00\x1c\x00\x00\x00\xff\xff\xff\xff\a\x00\x00\x00\b\x00\x00\x00")

xml.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,12 @@ func (f *XMLFile) readChunk(r io.ReaderAt, offset int64) (*ResChunkHeader, error
144144
if err := binary.Read(sr, binary.LittleEndian, chunkHeader); err != nil {
145145
return nil, err
146146
}
147+
if chunkHeader.HeaderSize < uint16(binary.Size(chunkHeader)) {
148+
return nil, fmt.Errorf("androidbinary: invalid chunk header size: %d", chunkHeader.HeaderSize)
149+
}
150+
if chunkHeader.Size < uint32(chunkHeader.HeaderSize) {
151+
return nil, fmt.Errorf("androidbinary: invalid chunk size: %d", chunkHeader.Size)
152+
}
147153

148154
var err error
149155
if _, err := sr.Seek(0, io.SeekStart); err != nil {

0 commit comments

Comments
 (0)