Skip to content

Commit 69351a6

Browse files
committed
Add nil checks to prevent panics
1 parent d19f6d4 commit 69351a6

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

reader.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ func (r *Reader) startNode() (uint, error) {
107107
// Lookup takes an IP address as a net.IP structure and a pointer to the
108108
// result value to Decode into.
109109
func (r *Reader) Lookup(ipAddress net.IP, result interface{}) error {
110+
if r == nil {
111+
return errors.New("not initialized")
112+
}
110113
pointer, err := r.lookupPointer(ipAddress)
111114
if pointer == 0 || err != nil {
112115
return err
@@ -120,6 +123,9 @@ func (r *Reader) Lookup(ipAddress net.IP, result interface{}) error {
120123
// is an advanced API, which exists to provide clients with a means to cache
121124
// previously-decoded records.
122125
func (r *Reader) LookupOffset(ipAddress net.IP) (uintptr, error) {
126+
if r == nil {
127+
return 0, errors.New("not initialized")
128+
}
123129
pointer, err := r.lookupPointer(ipAddress)
124130
if pointer == 0 || err != nil {
125131
return NotFound, err
@@ -144,6 +150,9 @@ func (r *Reader) LookupOffset(ipAddress net.IP) (uintptr, error) {
144150
// single representative record for that country. This uintptr behavior allows
145151
// clients to leverage this normalization in their own sub-record caching.
146152
func (r *Reader) Decode(offset uintptr, result interface{}) error {
153+
if r == nil {
154+
return errors.New("not initialized")
155+
}
147156
rv := reflect.ValueOf(result)
148157
if rv.Kind() != reflect.Ptr || rv.IsNil() {
149158
return errors.New("result param must be a pointer")

reader_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,17 @@ func TestReader(t *testing.T) {
2929
}
3030
}
3131
}
32+
33+
var reader *Reader
34+
35+
decodeErr := reader.Decode(0, interface{}(nil))
36+
assert.Error(t, decodeErr)
37+
38+
lookupErr := reader.Lookup(net.IPv4(127, 0, 0, 1), interface{}(nil))
39+
assert.Error(t, lookupErr)
40+
41+
_, offsetErr := reader.LookupOffset(net.IPv4(127, 0, 0, 1))
42+
assert.Error(t, offsetErr)
3243
}
3344

3445
func TestReaderBytes(t *testing.T) {

0 commit comments

Comments
 (0)