From 02028bf8bef50eded6864067d001a1ae282f45be Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Mon, 13 Feb 2017 13:08:28 +0100 Subject: [PATCH] fix panic when there is no available handler --- app/proxyman/inbound/always.go | 3 +++ app/proxyman/inbound/dynamic.go | 3 +++ proxy/vmess/inbound/inbound.go | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/proxyman/inbound/always.go b/app/proxyman/inbound/always.go index f2826c85e..92b8c7626 100644 --- a/app/proxyman/inbound/always.go +++ b/app/proxyman/inbound/always.go @@ -80,6 +80,9 @@ func (h *AlwaysOnInboundHandler) Close() { } func (h *AlwaysOnInboundHandler) GetRandomInboundProxy() (proxy.Inbound, net.Port, int) { + if len(h.workers) == 0 { + return nil, 0, 0 + } w := h.workers[dice.Roll(len(h.workers))] return w.Proxy(), w.Port(), 9999 } diff --git a/app/proxyman/inbound/dynamic.go b/app/proxyman/inbound/dynamic.go index 2c9469ce0..34b47f1b9 100644 --- a/app/proxyman/inbound/dynamic.go +++ b/app/proxyman/inbound/dynamic.go @@ -163,6 +163,9 @@ func (h *DynamicInboundHandler) GetRandomInboundProxy() (proxy.Inbound, v2net.Po h.workerMutex.RLock() defer h.workerMutex.RUnlock() + if len(h.worker) == 0 { + return nil, 0, 0 + } w := h.worker[dice.Roll(len(h.worker))] expire := h.receiverConfig.AllocationStrategy.GetRefreshValue() - uint32(time.Since(h.lastRefresh)/time.Minute) return w.Proxy(), w.Port(), int(expire) diff --git a/proxy/vmess/inbound/inbound.go b/proxy/vmess/inbound/inbound.go index ac8337eb2..7ba17685d 100644 --- a/proxy/vmess/inbound/inbound.go +++ b/proxy/vmess/inbound/inbound.go @@ -252,7 +252,7 @@ func (v *VMessInboundHandler) generateCommand(ctx context.Context, request *prot } proxyHandler, port, availableMin := handler.GetRandomInboundProxy() inboundHandler, ok := proxyHandler.(*VMessInboundHandler) - if ok { + if ok && inboundHandler != nil { if availableMin > 255 { availableMin = 255 }