From 35cebee8198c3873f23e8c3d810160006a211887 Mon Sep 17 00:00:00 2001 From: Alexey Date: Wed, 6 Aug 2025 19:17:10 +0300 Subject: [PATCH] fix bug with empty result and non table result --- internal/server/rpc/responsers.go | 6 ++++++ internal/server/rpc/writers.go | 2 +- internal/server/sv1/lua_handler.go | 17 +++++++++-------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/internal/server/rpc/responsers.go b/internal/server/rpc/responsers.go index f0fa263..699cefe 100644 --- a/internal/server/rpc/responsers.go +++ b/internal/server/rpc/responsers.go @@ -25,6 +25,12 @@ func NewError(code int, message string, data any, id *json.RawMessage) *RPCRespo } func NewResponse(result any, id *json.RawMessage) *RPCResponse { + if result == nil { + return &RPCResponse{ + JSONRPC: JSONRPCVersion, + ID: id, + } + } return &RPCResponse{ JSONRPC: JSONRPCVersion, ID: id, diff --git a/internal/server/rpc/writers.go b/internal/server/rpc/writers.go index 5d35bd8..277011a 100644 --- a/internal/server/rpc/writers.go +++ b/internal/server/rpc/writers.go @@ -28,7 +28,7 @@ func write(nid string, w http.ResponseWriter, msg *RPCResponse) error { msg.Salt = generateSalt() if msg.Result != nil { msg.Checksum = generateChecksum(msg.Result) - } else { + } else if msg.Error != nil { msg.Checksum = generateChecksum(msg.Error) } diff --git a/internal/server/sv1/lua_handler.go b/internal/server/sv1/lua_handler.go index 7aa1884..345247b 100644 --- a/internal/server/sv1/lua_handler.go +++ b/internal/server/sv1/lua_handler.go @@ -149,8 +149,6 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest, L.SetField(inTable, "params", paramsTable) outTable := L.NewTable() - resultTable := L.NewTable() - L.SetField(outTable, "result", resultTable) L.SetField(inTable, "address", lua.LString(r.RemoteAddr)) L.SetField(sessionMod, "request", inTable) @@ -518,11 +516,14 @@ func (h *HandlerV1) handleLUA(sid string, r *http.Request, req *rpc.RPCRequest, } resultVal := outTbl.RawGetString("result") - payload := make(map[string]any) - if tbl, ok := resultVal.(*lua.LTable); ok { - tbl.ForEach(func(k, v lua.LValue) { payload[k.String()] = ConvertLuaTypesToGolang(v) }) - } else { - payload["message"] = ConvertLuaTypesToGolang(resultVal) + if resultVal != lua.LNil { + payload := make(map[string]any) + if tbl, ok := resultVal.(*lua.LTable); ok { + tbl.ForEach(func(k, v lua.LValue) { payload[k.String()] = ConvertLuaTypesToGolang(v) }) + } else { + return rpc.NewResponse(ConvertLuaTypesToGolang(resultVal), req.ID) + } + return rpc.NewResponse(payload, req.ID) } - return rpc.NewResponse(payload, req.ID) + return rpc.NewResponse(nil, req.ID) }