Skip to content

Commit 3dfa6d0

Browse files
committed
Validate public key lengths on debug_ API endpoints (fixes #1113)
1 parent 6b6cd0b commit 3dfa6d0

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/core/proto.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -251,15 +251,16 @@ func (p *protoHandler) getSelfHandler(in json.RawMessage) (interface{}, error) {
251251
if kbs, err = hex.DecodeString(req.Key); err != nil {
252252
return nil, err
253253
}
254+
if len(kbs) != ed25519.PublicKeySize {
255+
return nil, fmt.Errorf("invalid public key length")
256+
}
254257
copy(key[:], kbs)
255258
ch := make(chan []byte, 1)
256259
p.sendGetSelfRequest(key, func(info []byte) {
257260
ch <- info
258261
})
259-
timer := time.NewTimer(6 * time.Second)
260-
defer timer.Stop()
261262
select {
262-
case <-timer.C:
263+
case <-time.After(6 * time.Second):
263264
return nil, errors.New("timeout")
264265
case info := <-ch:
265266
var msg json.RawMessage
@@ -291,15 +292,16 @@ func (p *protoHandler) getPeersHandler(in json.RawMessage) (interface{}, error)
291292
if kbs, err = hex.DecodeString(req.Key); err != nil {
292293
return nil, err
293294
}
295+
if len(kbs) != ed25519.PublicKeySize {
296+
return nil, fmt.Errorf("invalid public key length")
297+
}
294298
copy(key[:], kbs)
295299
ch := make(chan []byte, 1)
296300
p.sendGetPeersRequest(key, func(info []byte) {
297301
ch <- info
298302
})
299-
timer := time.NewTimer(6 * time.Second)
300-
defer timer.Stop()
301303
select {
302-
case <-timer.C:
304+
case <-time.After(6 * time.Second):
303305
return nil, errors.New("timeout")
304306
case info := <-ch:
305307
ks := make(map[string][]string)
@@ -341,15 +343,16 @@ func (p *protoHandler) getTreeHandler(in json.RawMessage) (interface{}, error) {
341343
if kbs, err = hex.DecodeString(req.Key); err != nil {
342344
return nil, err
343345
}
346+
if len(kbs) != ed25519.PublicKeySize {
347+
return nil, fmt.Errorf("invalid public key length")
348+
}
344349
copy(key[:], kbs)
345350
ch := make(chan []byte, 1)
346351
p.sendGetTreeRequest(key, func(info []byte) {
347352
ch <- info
348353
})
349-
timer := time.NewTimer(6 * time.Second)
350-
defer timer.Stop()
351354
select {
352-
case <-timer.C:
355+
case <-time.After(6 * time.Second):
353356
return nil, errors.New("timeout")
354357
case info := <-ch:
355358
ks := make(map[string][]string)

0 commit comments

Comments
 (0)