AlexStocks commented on code in PR #3714:
URL: https://github.com/apache/dubbo-go/pull/3714#discussion_r3886584952
##########
protocol/dubbo/dubbo_invoker.go:
##########
@@ -163,7 +163,12 @@ func (di *DubboInvoker) Invoke(ctx context.Context, ivc
base.Invocation) result.
func (di *DubboInvoker) getTimeout(ivc *invocation.RPCInvocation)
time.Duration {
timeout := di.timeout
//default timeout
if attachTimeout, ok := ivc.GetAttachment(constant.TimeoutKey); ok {
//check invocation timeout
- timeout, _ = time.ParseDuration(attachTimeout)
+ // the timeout below is written back as bare milliseconds, so
accept both formats
+ if d, err := time.ParseDuration(attachTimeout); err == nil {
+ timeout = d
+ } else if ms, err := strconv.Atoi(attachTimeout); err == nil {
+ timeout = time.Duration(ms) * time.Millisecond
Review Comment:
[P1] 裸毫秒转 time.Duration 前需要校验可表示范围
strconv.Atoi 只保证字符串能放进 int,不保证乘以 time.Millisecond 后仍能放进 time.Duration。64
位下附件值 9223372036855 会成功解析,但相乘后溢出为负的 -2562047h47m16.854551616s;Invoke 把这个值传给
Getty 后,timeout <= 0 分支又会替换成硬编码 3s,重新出现本 PR 要修复的提前超时。请改用
time.ParseDuration(attachTimeout + "ms"),或在 ParseInt 后显式检查 time.Duration
的毫秒上下界,仅在可表示时覆盖默认 timeout;同时补 max-valid-ms 与 max+1 的边界测试。
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]