|
@@ -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)))
|