Browse Source

Sniff: Prevent crash on QUIC sniffer panic (#3978)

Co-authored-by: RPRX <63339210+RPRX@users.noreply.github.com>
pull/4002/head
风扇滑翔翼 2 weeks ago committed by GitHub
parent
commit
1ffb8a92cd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 14
      common/protocol/quic/sniff.go

14
common/protocol/quic/sniff.go

@ -1,6 +1,7 @@
package quic
import (
"context"
"crypto"
"crypto/aes"
"crypto/tls"
@ -46,7 +47,18 @@ var (
errNotQuicInitial = errors.New("not initial packet")
)
func SniffQUIC(b []byte) (*SniffHeader, error) {
func SniffQUIC(b []byte) (resultReturn *SniffHeader, errorReturn error) {
// In extremely rare cases, this sniffer may cause slice error
// and we set recover() here to prevent crash.
// TODO: Thoroughly fix this panic
defer func() {
if r := recover(); r != nil {
errors.LogError(context.Background(), "Failed to sniff QUIC: ", r)
resultReturn = nil
errorReturn = common.ErrNoClue
}
}()
// Crypto data separated across packets
cryptoLen := 0
cryptoData := bytespool.Alloc(int32(len(b)))

Loading…
Cancel
Save