Skip to content

Commit 78e25d6

Browse files
author
Craig Pastro
authored
Avoid use of json.NewDecoder (#313)
* Avoid use of json.NewDecoder Avoid use of json.NewDecoder if not needed. Resolves #303
1 parent 8aa5d6c commit 78e25d6

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

parser.go

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -137,23 +137,33 @@ func (p *Parser) ParseUnverified(tokenString string, claims Claims) (token *Toke
137137
}
138138

139139
// parse Claims
140-
var claimBytes []byte
141140
token.Claims = claims
142141

143-
if claimBytes, err = p.DecodeSegment(parts[1]); err != nil {
142+
claimBytes, err := p.DecodeSegment(parts[1])
143+
if err != nil {
144144
return token, parts, newError("could not base64 decode claim", ErrTokenMalformed, err)
145145
}
146-
dec := json.NewDecoder(bytes.NewBuffer(claimBytes))
147-
if p.useJSONNumber {
148-
dec.UseNumber()
149-
}
150-
// JSON Decode. Special case for map type to avoid weird pointer behavior
151-
if c, ok := token.Claims.(MapClaims); ok {
152-
err = dec.Decode(&c)
146+
147+
// If `useJSONNumber` is enabled then we must use *json.Decoder to decode
148+
// the claims. However, this comes with a performance penalty so only use
149+
// it if we must and, otherwise, simple use json.Unmarshal.
150+
if !p.useJSONNumber {
151+
// JSON Unmarshal. Special case for map type to avoid weird pointer behavior.
152+
if c, ok := token.Claims.(MapClaims); ok {
153+
err = json.Unmarshal(claimBytes, &c)
154+
} else {
155+
err = json.Unmarshal(claimBytes, &claims)
156+
}
153157
} else {
154-
err = dec.Decode(&claims)
158+
dec := json.NewDecoder(bytes.NewBuffer(claimBytes))
159+
dec.UseNumber()
160+
// JSON Decode. Special case for map type to avoid weird pointer behavior.
161+
if c, ok := token.Claims.(MapClaims); ok {
162+
err = dec.Decode(&c)
163+
} else {
164+
err = dec.Decode(&claims)
165+
}
155166
}
156-
// Handle decode error
157167
if err != nil {
158168
return token, parts, newError("could not JSON decode claim", ErrTokenMalformed, err)
159169
}

0 commit comments

Comments
 (0)