Remove size limit in RPC client, keep it in server
The size limit makes a lot of sense for the server, as it never has to accept very large data. The client, however, can request arbitrary amounts of data with `listtransactions` on a large wallet. Fixes #4604.
This commit is contained in:
parent
e17151ad2a
commit
733177ebd3
4 changed files with 5 additions and 5 deletions
|
@ -126,7 +126,7 @@ Object CallRPC(const string& strMethod, const Array& params)
|
|||
// Receive HTTP reply message headers and body
|
||||
map<string, string> mapHeaders;
|
||||
string strReply;
|
||||
ReadHTTPMessage(stream, mapHeaders, strReply, nProto);
|
||||
ReadHTTPMessage(stream, mapHeaders, strReply, nProto, std::numeric_limits<size_t>::max());
|
||||
|
||||
if (nStatus == HTTP_UNAUTHORIZED)
|
||||
throw runtime_error("incorrect rpcuser or rpcpassword (authorization failed)");
|
||||
|
|
|
@ -201,14 +201,14 @@ int ReadHTTPHeaders(std::basic_istream<char>& stream, map<string, string>& mapHe
|
|||
|
||||
int ReadHTTPMessage(std::basic_istream<char>& stream, map<string,
|
||||
string>& mapHeadersRet, string& strMessageRet,
|
||||
int nProto)
|
||||
int nProto, size_t max_size)
|
||||
{
|
||||
mapHeadersRet.clear();
|
||||
strMessageRet = "";
|
||||
|
||||
// Read header
|
||||
int nLen = ReadHTTPHeaders(stream, mapHeadersRet);
|
||||
if (nLen < 0 || nLen > (int)MAX_SIZE)
|
||||
if (nLen < 0 || (size_t)nLen > max_size)
|
||||
return HTTP_INTERNAL_SERVER_ERROR;
|
||||
|
||||
// Read message
|
||||
|
|
|
@ -153,7 +153,7 @@ bool ReadHTTPRequestLine(std::basic_istream<char>& stream, int &proto,
|
|||
int ReadHTTPStatus(std::basic_istream<char>& stream, int &proto);
|
||||
int ReadHTTPHeaders(std::basic_istream<char>& stream, std::map<std::string, std::string>& mapHeadersRet);
|
||||
int ReadHTTPMessage(std::basic_istream<char>& stream, std::map<std::string, std::string>& mapHeadersRet,
|
||||
std::string& strMessageRet, int nProto);
|
||||
std::string& strMessageRet, int nProto, size_t max_size);
|
||||
std::string JSONRPCRequest(const std::string& strMethod, const json_spirit::Array& params, const json_spirit::Value& id);
|
||||
json_spirit::Object JSONRPCReplyObj(const json_spirit::Value& result, const json_spirit::Value& error, const json_spirit::Value& id);
|
||||
std::string JSONRPCReply(const json_spirit::Value& result, const json_spirit::Value& error, const json_spirit::Value& id);
|
||||
|
|
|
@ -891,7 +891,7 @@ void ServiceConnection(AcceptedConnection *conn)
|
|||
break;
|
||||
|
||||
// Read HTTP message headers and body
|
||||
ReadHTTPMessage(conn->stream(), mapHeaders, strRequest, nProto);
|
||||
ReadHTTPMessage(conn->stream(), mapHeaders, strRequest, nProto, MAX_SIZE);
|
||||
|
||||
// HTTP Keep-Alive is false; close connection immediately
|
||||
if (mapHeaders["connection"] == "close")
|
||||
|
|
Loading…
Reference in a new issue