tpl/collections: Fix where on type mismatches
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 23 Apr 2021 09:05:15 +0000 (11:05 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 23 Apr 2021 16:06:49 +0000 (18:06 +0200)
Fixes #8353

tpl/collections/where.go
tpl/collections/where_test.go

index c371f6ae86a1c2f7e973f050fbf0c17a7bc63c03..8ffcf616570f0ac78e24a3bb9494ddd8df5ef550 100644 (file)
@@ -87,7 +87,8 @@ func (ns *Namespace) checkCondition(v, mv reflect.Value, op string) (bool, error
        var ima []int64
        var fma []float64
        var sma []string
-       if mv.Type() == v.Type() {
+
+       if mv.Kind() == v.Kind() {
                switch v.Kind() {
                case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
                        iv := v.Int()
index 47b61bdcafeab05fe78bef07dab9f6c94e57fc12..2a97c8cd00514ff7ca8aedca6ed4a839085b1e41 100644 (file)
@@ -15,6 +15,7 @@ package collections
 
 import (
        "fmt"
+       "html/template"
        "reflect"
        "strings"
        "testing"
@@ -146,6 +147,17 @@ func TestWhere(t *testing.T) {
                        key: "b", match: 2.0, op: ">=",
                        expect: []map[string]float64{{"a": 1, "b": 2}, {"a": 3, "b": 3}},
                },
+               // Issue #8353
+               // String type mismatch.
+               {
+                       seq: []map[string]interface{}{
+                               {"a": "1", "b": "2"}, {"a": "3", "b": template.HTML("4")}, {"a": "5", "x": "4"},
+                       },
+                       key: "b", match: "4",
+                       expect: []map[string]interface{}{
+                               {"a": "3", "b": template.HTML("4")},
+                       },
+               },
                {
                        seq: []TstX{
                                {A: "a", B: "b"}, {A: "c", B: "d"}, {A: "e", B: "f"},