Skip to content
This repository was archived by the owner on Feb 21, 2025. It is now read-only.

Commit ec7beff

Browse files
authored
Fetch from upstream. (#12)
2 parents 568c732 + 0c8e25b commit ec7beff

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

minecraft/dial.go

+11-7
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,11 @@ func (d Dialer) DialContext(ctx context.Context, network, address string) (conn
172172
if err != nil {
173173
return nil, &net.OpError{Op: "dial", Net: "minecraft", Err: err}
174174
}
175-
d.IdentityData = readChainIdentityData([]byte(chainData))
175+
identityData, err := readChainIdentityData([]byte(chainData))
176+
if err != nil {
177+
return nil, &net.OpError{Op: "dial", Net: "minecraft", Err: err}
178+
}
179+
d.IdentityData = identityData
176180
}
177181

178182
n, ok := networkByID(network, d.ErrorLog)
@@ -274,26 +278,26 @@ func (d Dialer) DialContext(ctx context.Context, network, address string) (conn
274278

275279
// readChainIdentityData reads a login.IdentityData from the Mojang chain
276280
// obtained through authentication.
277-
func readChainIdentityData(chainData []byte) login.IdentityData {
281+
func readChainIdentityData(chainData []byte) (login.IdentityData, error) {
278282
chain := struct{ Chain []string }{}
279283
if err := json.Unmarshal(chainData, &chain); err != nil {
280-
panic("invalid chain data from authentication: " + err.Error())
284+
return login.IdentityData{}, fmt.Errorf("read chain: read json: %w", err)
281285
}
282286
data := chain.Chain[1]
283287
claims := struct {
284288
ExtraData login.IdentityData `json:"extraData"`
285289
}{}
286290
tok, err := jwt.ParseSigned(data)
287291
if err != nil {
288-
panic("invalid chain data from authentication: " + err.Error())
292+
return login.IdentityData{}, fmt.Errorf("read chain: parse jwt: %w", err)
289293
}
290294
if err := tok.UnsafeClaimsWithoutVerification(&claims); err != nil {
291-
panic("invalid chain data from authentication: " + err.Error())
295+
return login.IdentityData{}, fmt.Errorf("read chain: read claims: %w", err)
292296
}
293297
if claims.ExtraData.Identity == "" {
294-
panic("chain data contained no data")
298+
return login.IdentityData{}, fmt.Errorf("read chain: no extra data found")
295299
}
296-
return claims.ExtraData
300+
return claims.ExtraData, nil
297301
}
298302

299303
// listenConn listens on the connection until it is closed on another goroutine. The channel passed will

0 commit comments

Comments
 (0)