What happened:
transport/session.go:931-934,UDP 读缓冲的上限分支比较的是尚未赋值的 bufLen:
var (
...
bufLen int // ← 声明后未赋值,恒为 0
maxBufLen int
...
)
conn = s.Connection.(*gettyUDPConn)
maxBufLen = int(s.maxMsgLen + maxReadBufLen)
if int(s.maxMsgLen<<1) < bufLen { // ← 恒为 false:正数 < 0
maxBufLen = int(s.maxMsgLen << 1)
}
maxMsgLen 恒为正(默认 maxReadBufLen),int(s.maxMsgLen<<1) < 0 永远不成立,
该分支是死代码。从形状看意图应是拿 maxBufLen 参与比较(对小 maxMsgLen 把缓冲
收紧到 2×maxMsgLen),写成了 bufLen。当前效果:缓冲永远按 maxMsgLen+4KB 分配,
上限逻辑完全不生效。
What you expected to happen:
条件改为比较 maxBufLen,或删掉该分支——取决于原始意图,倾向由 maintainer 定。
How to reproduce it (as minimally and precisely as possible):
代码走查可证:bufLen 在比较点恒为零值,分支为常量可判定的死代码。
Anything else we need to know?:
无运行时危害,属逻辑错误清理。
What happened:
transport/session.go:931-934,UDP 读缓冲的上限分支比较的是尚未赋值的 bufLen:
maxMsgLen 恒为正(默认 maxReadBufLen),int(s.maxMsgLen<<1) < 0 永远不成立,
该分支是死代码。从形状看意图应是拿 maxBufLen 参与比较(对小 maxMsgLen 把缓冲
收紧到 2×maxMsgLen),写成了 bufLen。当前效果:缓冲永远按 maxMsgLen+4KB 分配,
上限逻辑完全不生效。
What you expected to happen:
条件改为比较 maxBufLen,或删掉该分支——取决于原始意图,倾向由 maintainer 定。
How to reproduce it (as minimally and precisely as possible):
代码走查可证:bufLen 在比较点恒为零值,分支为常量可判定的死代码。
Anything else we need to know?:
无运行时危害,属逻辑错误清理。