From 6d7eac1e1674bb1540ec88e6e63ac97a73e2fab5 Mon Sep 17 00:00:00 2001 From: sjlleo Date: Sun, 12 Jun 2022 12:38:38 +0800 Subject: [PATCH] fix: crash when geo struct is not initialized. --- printer/realtime_printer.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/printer/realtime_printer.go b/printer/realtime_printer.go index 0701ba6..eafa005 100644 --- a/printer/realtime_printer.go +++ b/printer/realtime_printer.go @@ -2,8 +2,10 @@ package printer import ( "fmt" + "reflect" "strings" + "github.com/xgadget-lab/nexttrace/ipgeo" "github.com/xgadget-lab/nexttrace/trace" ) @@ -63,7 +65,8 @@ func makeHopsType(res *trace.Result, ttl int) map[int]HopInfo { // 创建一个字典,存放所有当前TTL的跃点类型集合 hopProbesMap := make(map[int]HopInfo) for i := range res.Hops[ttl] { - if res.Hops[ttl][i].Address != nil { + // 判断是否Hops以及Geo结构体已经初始化 + if res.Hops[ttl][i].Address != nil && reflect.DeepEqual(res.Hops[ttl][i].Geo, ipgeo.IPGeoData{}) { if availableTTL := findLatestAvailableHop(res, ttl, i); availableTTL != -1 { switch { case strings.Contains(res.Hops[ttl][i].Geo.District, "IXP") || strings.Contains(strings.ToLower(res.Hops[ttl][i].Hostname), "ix"):