Skip to content

Commit feeaf95

Browse files
authored
Fix key.Remove removing 2 elements (#413)
* Add tests for #412 * fix off-by-one * Update Changes * slightly tweak test
1 parent fd3afd0 commit feeaf95

3 files changed

Lines changed: 50 additions & 1 deletion

File tree

Changes

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
Changes
22
=======
33

4+
v1.2.3
5+
[Buf fixes]
6+
* jwk.Set incorrectly removed 2 elements instead of one.
7+
8+
[Miscellaneous]
9+
* github.com/goccy/go-json has been upgraded to v0.7.4
10+
411
v1.2.2 13 Jul 2021
512
[Deprecation notice]
613
* `(jwe.Message).Decrypt()` will be removed from the API upon the next

jwk/jwk_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"math/big"
1111
"reflect"
12+
"strconv"
1213
"strings"
1314
"testing"
1415
"time"
@@ -1567,3 +1568,44 @@ func TestTypedFields(t *testing.T) {
15671568
}
15681569
})
15691570
}
1571+
1572+
func TestGH412(t *testing.T) {
1573+
set := jwk.NewSet()
1574+
1575+
const max = 5
1576+
for i := 0; i < max; i++ {
1577+
k, err := jwxtest.GenerateRsaJwk()
1578+
if !assert.NoError(t, err, `jwxttest.GenerateRsaJwk() should succeed`) {
1579+
return
1580+
}
1581+
1582+
k.Set(jwk.KeyIDKey, strconv.Itoa(i))
1583+
set.Add(k)
1584+
}
1585+
1586+
if !assert.Equal(t, max, set.Len(), `set.Len should be %d`, max) {
1587+
return
1588+
}
1589+
1590+
k, ok := set.Get(max / 2)
1591+
if !assert.True(t, ok, `set.Get should succeed`) {
1592+
return
1593+
}
1594+
1595+
if !assert.True(t, set.Remove(k), `set.Remove should succeed`) {
1596+
return
1597+
}
1598+
1599+
if !assert.Equal(t, max-1, set.Len(), `set.Len should be %d`, max-1) {
1600+
return
1601+
}
1602+
1603+
ctx := context.Background()
1604+
for iter := set.Iterate(ctx); iter.Next(ctx); {
1605+
pair := iter.Pair()
1606+
key := pair.Value.(jwk.Key)
1607+
if !assert.NotEqual(t, k.KeyID(), key.KeyID(), `key id should not match`) {
1608+
return
1609+
}
1610+
}
1611+
}

jwk/set.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func (s *set) Remove(key Key) bool {
7171
case len(s.keys) - 1:
7272
s.keys = s.keys[:i-1]
7373
default:
74-
s.keys = append(s.keys[:i-1], s.keys[i+1:]...)
74+
s.keys = append(s.keys[:i], s.keys[i+1:]...)
7575
}
7676
return true
7777
}

0 commit comments

Comments
 (0)