diff --git a/libtransmission/resume.cc b/libtransmission/resume.cc index fa9bcf76f..97c07c9dd 100644 --- a/libtransmission/resume.cc +++ b/libtransmission/resume.cc @@ -375,7 +375,7 @@ static uint64_t loadName(tr_variant* dict, tr_torrent* tor) return 0; } - name = tr_strvDup(name); + name = tr_strvStrip(name); if (std::empty(name)) { return 0; diff --git a/libtransmission/variant.cc b/libtransmission/variant.cc index 8b8f7b904..eb7f8b592 100644 --- a/libtransmission/variant.cc +++ b/libtransmission/variant.cc @@ -1209,7 +1209,8 @@ int tr_variantToFile(tr_variant const* v, tr_variant_fmt fmt, char const* filena { auto error_code = int{ 0 }; auto contents_len = size_t{}; - auto const* contents = tr_variantToStr(v, fmt, &contents_len); + auto* const contents = tr_variantToStr(v, fmt, &contents_len); + tr_error* error = nullptr; tr_saveFile(filename, { contents, contents_len }, &error); if (error != nullptr) @@ -1218,6 +1219,8 @@ int tr_variantToFile(tr_variant const* v, tr_variant_fmt fmt, char const* filena error_code = error->code; tr_error_clear(&error); } + + tr_free(contents); return error_code; } diff --git a/libtransmission/webseed.cc b/libtransmission/webseed.cc index d3a1ac08f..d76891c3a 100644 --- a/libtransmission/webseed.cc +++ b/libtransmission/webseed.cc @@ -248,10 +248,10 @@ static void write_block_func(void* vdata) struct connection_succeeded_data { - struct tr_webseed* webseed; - char* real_url; - tr_piece_index_t piece_index; - uint32_t piece_offset; + tr_webseed* webseed = nullptr; + std::string real_url; + tr_piece_index_t piece_index = 0; + uint32_t piece_offset = 0; }; static void connection_succeeded(void* vdata) @@ -265,7 +265,7 @@ static void connection_succeeded(void* vdata) w->consecutive_failures = w->retry_tickcount = w->retry_challenge = 0; } - if (data->real_url != nullptr) + if (!std::empty(data->real_url)) { tr_torrent const* const tor = tr_torrentFindFromId(w->session, w->torrent_id); @@ -275,12 +275,10 @@ static void connection_succeeded(void* vdata) auto file_offset = uint64_t{}; tr_ioFindFileLocation(tor, data->piece_index, data->piece_offset, &file_index, &file_offset); w->file_urls[file_index].assign(data->real_url); - data->real_url = nullptr; } } - tr_free(data->real_url); - tr_free(data); + delete data; } /*** @@ -308,15 +306,17 @@ static void on_content_changed(struct evbuffer* buf, struct evbuffer_cb_info con if (task->response_code == 206) { - auto* const data = tr_new(struct connection_succeeded_data, 1); - data->webseed = w; - data->real_url = tr_strdup(tr_webGetTaskRealUrl(task->web_task)); - data->piece_index = task->piece_index; - data->piece_offset = task->piece_offset + task->blocks_done * task->block_size + len - 1; + auto const* real_url = tr_webGetTaskRealUrl(task->web_task); /* processing this uses a tr_torrent pointer, so push the work to the libevent thread... */ - tr_runInEventThread(session, connection_succeeded, data); + tr_runInEventThread( + session, + connection_succeeded, + new connection_succeeded_data{ w, + real_url ? real_url : "", + task->piece_index, + task->piece_offset + task->blocks_done * task->block_size + len - 1 }); } }