Skip to content

Commit 8578343

Browse files
authored
Merge pull request #40 from superfly/msgpack-fix
Msgpack fix 😡
2 parents 34f824c + 1bdaf8e commit 8578343

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

caveats.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package macaroon
22

33
import (
4+
"bytes"
45
"encoding/json"
56
"fmt"
67
"time"
@@ -126,8 +127,17 @@ func (c UnregisteredCaveat) MarshalMsgpack() ([]byte, error) {
126127
}
127128

128129
func (c *UnregisteredCaveat) UnmarshalMsgpack(data []byte) error {
130+
dec := msgpack.GetDecoder()
131+
defer msgpack.PutDecoder(dec)
132+
133+
dec.Reset(bytes.NewReader(data))
134+
dec.SetMapDecoder(func(d *msgpack.Decoder) (interface{}, error) {
135+
return d.DecodeUntypedMap()
136+
})
137+
129138
c.RawMsgpack = data
130-
return msgpack.Unmarshal(data, &c.Body)
139+
140+
return dec.Decode(&c.Body)
131141
}
132142

133143
func (c UnregisteredCaveat) MarshalJSON() ([]byte, error) {

caveats_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ func TestSimple(t *testing.T) {
146146
}
147147

148148
type myUnregistered struct {
149-
Bar map[string]string `json:"bar"`
150-
Foo int `json:"foo"`
149+
Bar map[int]string `json:"bar"`
150+
Foo int `json:"foo"`
151151
}
152152

153153
func (c *myUnregistered) CaveatType() CaveatType { return cavMyUnregistered }
@@ -156,7 +156,7 @@ func (c *myUnregistered) Prohibits(f Access) error { return nil }
156156

157157
func TestUnregisteredCaveatJSON(t *testing.T) {
158158
RegisterCaveatType(&myUnregistered{})
159-
c := &myUnregistered{Foo: 1, Bar: map[string]string{"a": "b"}}
159+
c := &myUnregistered{Foo: 1, Bar: map[int]string{1: "b"}}
160160
cs := NewCaveatSet(c)
161161
b, err := json.Marshal(cs)
162162
assert.NoError(t, err)
@@ -174,7 +174,7 @@ func TestUnregisteredCaveatJSON(t *testing.T) {
174174
assert.Equal(t,
175175
any(map[string]any{
176176
"bar": map[string]any{
177-
"a": "b",
177+
"1": "b",
178178
},
179179
"foo": float64(1),
180180
}),
@@ -199,7 +199,7 @@ func TestUnregisteredCaveatJSON(t *testing.T) {
199199

200200
func TestUnregisteredCaveatMsgpack(t *testing.T) {
201201
RegisterCaveatType(&myUnregistered{})
202-
c := &myUnregistered{Foo: 1, Bar: map[string]string{"a": "b"}}
202+
c := &myUnregistered{Foo: 1, Bar: map[int]string{1: "b"}}
203203
cs := NewCaveatSet(c)
204204
b, err := cs.MarshalMsgpack()
205205
assert.NoError(t, err)
@@ -215,8 +215,8 @@ func TestUnregisteredCaveatMsgpack(t *testing.T) {
215215

216216
assert.Equal(t,
217217
any([]any{
218-
map[string]any{
219-
"a": "b",
218+
map[any]any{
219+
int8(1): "b",
220220
},
221221
int8(1),
222222
}),

0 commit comments

Comments
 (0)