From 39b3e3cb3874b7827e6c5cc655cf47d5d1f33aa7 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 15 Jul 2020 21:52:19 +0200 Subject: Fix segfault on torrent add, fix corruption of rss json downloaded item --- src/main.c | 1 + src/rss.c | 2 +- src/rss_html_common.c | 12 ++++++++---- 3 files changed, 10 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index b2f238a..e5c5321 100644 --- a/src/main.c +++ b/src/main.c @@ -441,6 +441,7 @@ static void sync_rss_html(char *rss_config_dir, char *html_config_dir, char *pro memset(unfinished_torrents.items, 0, unfinished_torrents.size); automedia_running = 1; + transmission_list_torrents(&transmission_session, torrent_list_check_new_downloads_callback, &unfinished_torrents); /* running is set to 0 in SIGINT signal handler (ctrl+c) */ while(automedia_running) { sync_tracked_rss(&transmission_session, rss_config_dir); diff --git a/src/rss.c b/src/rss.c index 9486e6e..0e7647e 100644 --- a/src/rss.c +++ b/src/rss.c @@ -498,7 +498,7 @@ static int add_torrents_in_reverse(TransmissionSession *transmission_session, Bu result = tracked_item_update_latest(&tracked_item, rss_tracked_dir, added_download_items, torrent_names, torrent_name_index); for(int i = 0; i < torrent_name_index; ++i) { - free(torrent_names[torrent_name_index]); + free(torrent_names[i]); } buffer_deinit(&json_element_buffer); diff --git a/src/rss_html_common.c b/src/rss_html_common.c index ba4682b..352a3a2 100644 --- a/src/rss_html_common.c +++ b/src/rss_html_common.c @@ -190,6 +190,7 @@ int tracked_item_update_latest(TrackedItem *tracked_item, char *tracked_dir, Dow } struct json_value_s *downloaded_json = json_object_get_field_by_name(tracked_item->json_data, "downloaded"); + struct json_array_s *downloaded_json_array_orig = NULL; struct json_array_s *downloaded_json_array = NULL; struct json_array_s new_downloaded_array; @@ -214,6 +215,7 @@ int tracked_item_update_latest(TrackedItem *tracked_item, char *tracked_dir, Dow result = -1; goto cleanup; } + downloaded_json_array_orig = downloaded_json_array; } else { downloaded_json_array = &new_downloaded_array; } @@ -313,10 +315,12 @@ int tracked_item_update_latest(TrackedItem *tracked_item, char *tracked_dir, Dow downloaded_json_array->length = 1; last_downloaded_element = &new_downloaded_item_element[i]; - struct json_object_element_s *prev_start = tracked_item->json_data->start; - tracked_item->json_data->start = &new_downloaded_array_obj_el; - new_downloaded_array_obj_el.next = prev_start; - tracked_item->json_data->length++; + if(!downloaded_json_array_orig) { + struct json_object_element_s *prev_start = tracked_item->json_data->start; + tracked_item->json_data->start = &new_downloaded_array_obj_el; + new_downloaded_array_obj_el.next = prev_start; + tracked_item->json_data->length++; + } } } -- cgit v1.2.3