mirror of
				https://git.hush.is/hush/hush3.git
				synced 2025-11-04 00:03:26 -05:00 
			
		
		
		
	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
					
				@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user