console: fix error message in faux JSON-RPC responses

The message was used as both key and value in the error object.
This only affected unusual errors with no error code.
This commit is contained in:
Felix Lange 2017-01-08 00:47:47 +01:00
parent 17182732f5
commit 9bab0b8a24

View File

@ -270,18 +270,15 @@ func (b *bridge) Send(call otto.FunctionCall) (response otto.Value) {
} else { } else {
resultVal, err := JSON.Call("parse", string(result)) resultVal, err := JSON.Call("parse", string(result))
if err != nil { if err != nil {
resp = newErrorResponse(call, -32603, err.Error(), &req.Id).Object() setError(resp, -32603, err.Error())
} else { } else {
resp.Set("result", resultVal) resp.Set("result", resultVal)
} }
} }
case rpc.Error: case rpc.Error:
resp.Set("error", map[string]interface{}{ setError(resp, err.ErrorCode(), err.Error())
"code": err.ErrorCode(),
"message": err.Error(),
})
default: default:
resp = newErrorResponse(call, -32603, err.Error(), &req.Id).Object() setError(resp, -32603, err.Error())
} }
resps.Call("push", resp) resps.Call("push", resp)
} }
@ -300,12 +297,8 @@ func (b *bridge) Send(call otto.FunctionCall) (response otto.Value) {
return response return response
} }
func newErrorResponse(call otto.FunctionCall, code int, msg string, id interface{}) otto.Value { func setError(resp *otto.Object, code int, msg string) {
// Bundle the error into a JSON RPC call response resp.Set("error", map[string]interface{}{"code": code, "message": msg})
m := map[string]interface{}{"version": "2.0", "id": id, "error": map[string]interface{}{"code": code, msg: msg}}
res, _ := json.Marshal(m)
val, _ := call.Otto.Run("(" + string(res) + ")")
return val
} }
// throwJSException panics on an otto.Value. The Otto VM will recover from the // throwJSException panics on an otto.Value. The Otto VM will recover from the