aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-07-15 21:52:19 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-15 21:53:09 +0200
commit39b3e3cb3874b7827e6c5cc655cf47d5d1f33aa7 (patch)
tree9b465836fd7e3f2f06f6cd36fbf508447dc668b3 /src
parent3e75758eb85777c77e5ca952583a9dd370fd5ca5 (diff)
Fix segfault on torrent add, fix corruption of rss json downloaded item
Diffstat (limited to 'src')
-rw-r--r--src/main.c1
-rw-r--r--src/rss.c2
-rw-r--r--src/rss_html_common.c12
3 files changed, 10 insertions, 5 deletions
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++;
+ }
}
}