diff --git a/src/rpc/rpc_manager.cc b/src/rpc/rpc_manager.cc index 6e9cd5c5..39faf7a1 100644 --- a/src/rpc/rpc_manager.cc +++ b/src/rpc/rpc_manager.cc @@ -167,6 +167,14 @@ RpcManager::cleanup() { m_jsonrpc.cleanup(); } +void +RpcManager::set_size_limit(uint64_t size) { + if (size > SCgiTask::max_content_size) + throw torrent::input_error("XMLRPC size limit cannot exceed the SCGI content size limit."); + + m_xmlrpc.set_size_limit(size); +} + void RpcManager::insert_command(const char* name, const char* parm, const char* doc) { m_xmlrpc.insert_command(name, parm, doc); diff --git a/src/rpc/rpc_manager.h b/src/rpc/rpc_manager.h index beb99647..e9b84b8c 100644 --- a/src/rpc/rpc_manager.h +++ b/src/rpc/rpc_manager.h @@ -62,7 +62,7 @@ public: void cleanup(); int64_t size_limit() { return m_xmlrpc.size_limit(); }; - void set_size_limit(uint64_t size) { m_xmlrpc.set_size_limit(size); }; + void set_size_limit(uint64_t size); int dialect() { return m_xmlrpc.dialect(); } void set_dialect(int dialect) { m_xmlrpc.set_dialect(dialect); } diff --git a/src/rpc/xmlrpc_c.cc b/src/rpc/xmlrpc_c.cc index ab04166d..08544b03 100644 --- a/src/rpc/xmlrpc_c.cc +++ b/src/rpc/xmlrpc_c.cc @@ -529,9 +529,6 @@ XmlRpc::size_limit() { void XmlRpc::set_size_limit(uint64_t size) { - if (size >= (64 << 20)) - throw torrent::input_error("Invalid XMLRPC limit size."); - xmlrpc_limit_set(XMLRPC_XML_SIZE_LIMIT_ID, size); }