From 77e67720656937c582ef17e7ac99c6bf39808e47ff6bf511bb1df957b3ed1630 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Mon, 2 Jun 2025 13:52:13 +0300 Subject: [PATCH] RPC sequence overflow check --- go/rpc/client.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/go/rpc/client.go b/go/rpc/client.go index 96faa93..309f13a 100644 --- a/go/rpc/client.go +++ b/go/rpc/client.go @@ -39,6 +39,9 @@ func (cc *ClientCodec) WriteRequest(req *rpc.Request, data any) (err error) { cc.pendingM.Lock() cc.pending[req.Seq] = req.ServiceMethod cc.pendingM.Unlock() + if req.Seq == 0xFFFFFFFFFFFFFFFF { + panic("keks/rpc: WriteRequest: req.Seq overflow") + } if _, err = keks.Encode(cc.conn, []any{req.Seq + 1, req.ServiceMethod}, nil); err != nil { return fmt.Errorf("keks/rpc: WriteRequest: %w", err) } @@ -58,7 +61,11 @@ func (cc *ClientCodec) ReadResponseHeader(resp *rpc.Response) (err error) { return fmt.Errorf("keks/rpc: ReadResponseHeader: %w", err) } list := r.([]any) - resp.Seq = list[0].(uint64) - 1 + resp.Seq = list[0].(uint64) + if resp.Seq == 0 { + panic("keks/rpc: ReadResponseHeader: resp.Seq is zero") + } + resp.Seq-- var ok bool cc.pendingM.Lock() resp.ServiceMethod, ok = cc.pending[resp.Seq] -- 2.50.0