From 8b897d8ca95df941361bf9a2759b76577a5df4bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Garcia?= Date: Sat, 18 Sep 2021 21:00:22 -0300 Subject: [PATCH] Add error check for nil pointers passed as arguments to Delete() --- ksql.go | 7 +++++++ ksql_test.go | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/ksql.go b/ksql.go index aeeef37..67e7618 100644 --- a/ksql.go +++ b/ksql.go @@ -583,6 +583,13 @@ func normalizeIDsAsMaps(idNames []string, ids []interface{}) ([]map[string]inter for i := range ids { t := reflect.TypeOf(ids[i]) switch t.Kind() { + case reflect.Ptr: + v := reflect.ValueOf(ids[i]) + if v.IsNil() { + return nil, fmt.Errorf("ksql: expected a valid pointer to struct as argument but received a nil pointer: %v", ids[i]) + } + + fallthrough case reflect.Struct: m, err := kstructs.StructToMap(ids[i]) if err != nil { diff --git a/ksql_test.go b/ksql_test.go index 05bc06d..47182b1 100644 --- a/ksql_test.go +++ b/ksql_test.go @@ -1018,6 +1018,18 @@ func TestDelete(t *testing.T) { assert.Equal(t, 1, len(results)) assert.Equal(t, "This won't be deleted", results[0].Name) }) + + t.Run("should report error if it receives a nil pointer to a struct", func(t *testing.T) { + db, closer := connectDB(t, config) + defer closer.Close() + + ctx := context.Background() + c := newTestDB(db, config.driver) + + var user *User + err := c.Delete(ctx, UsersTable, user) + assert.NotEqual(t, nil, err) + }) }) } }