Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
05037eaf
Unverified
Commit
05037eaf
authored
Nov 02, 2022
by
Jordan Krage
Committed by
GitHub
Nov 02, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rpc: handle wrong HTTP batch response length (#26064)
parent
4a81e5af
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
52 additions
and
0 deletions
+52
-0
client.go
rpc/client.go
+1
-0
client_test.go
rpc/client_test.go
+48
-0
http.go
rpc/http.go
+3
-0
No files found.
rpc/client.go
View file @
05037eaf
...
...
@@ -32,6 +32,7 @@ import (
)
var
(
ErrBadResult
=
errors
.
New
(
"bad result in JSON-RPC response"
)
ErrClientQuit
=
errors
.
New
(
"client is closed"
)
ErrNoResult
=
errors
.
New
(
"no result in JSON-RPC response"
)
ErrSubscriptionQueueOverflow
=
errors
.
New
(
"subscription queue overflow"
)
...
...
rpc/client_test.go
View file @
05037eaf
...
...
@@ -19,6 +19,7 @@ package rpc
import
(
"context"
"encoding/json"
"errors"
"fmt"
"math/rand"
"net"
...
...
@@ -148,6 +149,53 @@ func TestClientBatchRequest(t *testing.T) {
}
}
func
TestClientBatchRequest_len
(
t
*
testing
.
T
)
{
b
,
err
:=
json
.
Marshal
([]
jsonrpcMessage
{
{
Version
:
"2.0"
,
ID
:
json
.
RawMessage
(
"1"
),
Method
:
"foo"
,
Result
:
json
.
RawMessage
(
`"0x1"`
)},
{
Version
:
"2.0"
,
ID
:
json
.
RawMessage
(
"2"
),
Method
:
"bar"
,
Result
:
json
.
RawMessage
(
`"0x2"`
)},
})
if
err
!=
nil
{
t
.
Fatal
(
"failed to encode jsonrpc message:"
,
err
)
}
s
:=
httptest
.
NewServer
(
http
.
HandlerFunc
(
func
(
rw
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
_
,
err
:=
rw
.
Write
(
b
)
if
err
!=
nil
{
t
.
Error
(
"failed to write response:"
,
err
)
}
}))
t
.
Cleanup
(
s
.
Close
)
client
,
err
:=
Dial
(
s
.
URL
)
if
err
!=
nil
{
t
.
Fatal
(
"failed to dial test server:"
,
err
)
}
defer
client
.
Close
()
t
.
Run
(
"too-few"
,
func
(
t
*
testing
.
T
)
{
batch
:=
[]
BatchElem
{
{
Method
:
"foo"
},
{
Method
:
"bar"
},
{
Method
:
"baz"
},
}
ctx
,
cancelFn
:=
context
.
WithTimeout
(
context
.
Background
(),
time
.
Second
)
defer
cancelFn
()
if
err
:=
client
.
BatchCallContext
(
ctx
,
batch
);
!
errors
.
Is
(
err
,
ErrBadResult
)
{
t
.
Errorf
(
"expected %q but got: %v"
,
ErrBadResult
,
err
)
}
})
t
.
Run
(
"too-many"
,
func
(
t
*
testing
.
T
)
{
batch
:=
[]
BatchElem
{
{
Method
:
"foo"
},
}
ctx
,
cancelFn
:=
context
.
WithTimeout
(
context
.
Background
(),
time
.
Second
)
defer
cancelFn
()
if
err
:=
client
.
BatchCallContext
(
ctx
,
batch
);
!
errors
.
Is
(
err
,
ErrBadResult
)
{
t
.
Errorf
(
"expected %q but got: %v"
,
ErrBadResult
,
err
)
}
})
}
func
TestClientNotify
(
t
*
testing
.
T
)
{
server
:=
newTestServer
()
defer
server
.
Stop
()
...
...
rpc/http.go
View file @
05037eaf
...
...
@@ -192,6 +192,9 @@ func (c *Client) sendBatchHTTP(ctx context.Context, op *requestOp, msgs []*jsonr
if
err
:=
json
.
NewDecoder
(
respBody
)
.
Decode
(
&
respmsgs
);
err
!=
nil
{
return
err
}
if
len
(
respmsgs
)
!=
len
(
msgs
)
{
return
fmt
.
Errorf
(
"batch has %d requests but response has %d: %w"
,
len
(
msgs
),
len
(
respmsgs
),
ErrBadResult
)
}
for
i
:=
0
;
i
<
len
(
respmsgs
);
i
++
{
op
.
resp
<-
&
respmsgs
[
i
]
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment