diff --git a/src/rpc/rpc_manager.cc b/src/rpc/rpc_manager.cc index 3017a141..3da3b1ff 100644 --- a/src/rpc/rpc_manager.cc +++ b/src/rpc/rpc_manager.cc @@ -18,21 +18,18 @@ RpcManager::object_to_target(const torrent::Object& obj, int call_flags, rpc::ta if (call_flags & CommandMap::flag_no_target) return; - if (!obj.is_string()) { + if (!obj.is_string()) throw torrent::input_error("invalid parameters: target must be a string"); - } std::string target_string = obj.as_string(); bool require_index = (call_flags & (CommandMap::flag_tracker_target | CommandMap::flag_file_target)); - if (target_string.size() == 0 && !require_index) { + if (target_string.size() == 0 && !require_index) return; - } // Length of SHA1 hash is 40 - if (target_string.size() < 40) { + if (target_string.size() < 40) throw torrent::input_error("invalid parameters: invalid target"); - } char type = 'd'; std::string hash; diff --git a/src/rpc/xmlrpc_c.cc b/src/rpc/xmlrpc_c.cc index 40b0eab7..2bec35d0 100644 --- a/src/rpc/xmlrpc_c.cc +++ b/src/rpc/xmlrpc_c.cc @@ -219,7 +219,7 @@ xmlrpc_to_object(xmlrpc_env* env, xmlrpc_value* value, int call_type, rpc::targe if (env->fault_occurred) throw xmlrpc_error_c(env); - if (target->first == XmlRpc::call_download && + if (target != nullptr && target->first == XmlRpc::call_download && (call_type == XmlRpc::call_file || call_type == XmlRpc::call_tracker)) { // If we have a download target and the call type requires // another contained type, then we try to use the next