Verify data is array/slice when decoding a slice
diff --git a/mapstructure.go b/mapstructure.go
index 35b11df..8f3ded9 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -119,6 +119,12 @@
 
 func decodeSlice(name string, data interface{}, val reflect.Value) error {
 	dataVal := reflect.Indirect(reflect.ValueOf(data))
+	dataValKind := dataVal.Kind()
+	if dataValKind != reflect.Array && dataValKind != reflect.Slice {
+		return fmt.Errorf(
+			"'%s': source data must be an array or slice, got %s", name, dataValKind)
+	}
+
 	valType := val.Type()
 	valElemType := valType.Elem()