Fix use after free for notifications

FossilOrigin-Name: 62bbe10354d66ecc0d9b5ca594540d549971be22a3d4c761db0f3a6c6ac4ca75
This commit is contained in:
me@ow.nekobit.net 2022-04-27 18:36:32 +00:00
parent f87d88374e
commit ef93dcb0fe
5 changed files with 13 additions and 19 deletions

View file

@ -122,7 +122,6 @@ static void fetch_account_page(struct session* ssn,
struct mstdnt_relationship* relationships = NULL;
size_t relationships_len = 0;
int lookup_type = config_experimental_lookup ? MSTDNT_LOOKUP_ACCT : MSTDNT_LOOKUP_ID;
if (mastodont_get_account(api, lookup_type, id, &acct, &storage))
@ -358,8 +357,7 @@ void content_account_bookmarks(struct session* ssn, mastodont_t* api, char** dat
struct mstdnt_storage storage = { 0 };
char* status_format = NULL,
*navigation_box = NULL,
*output = NULL,
*page = NULL;
*output = NULL;
char* start_id;
struct mstdnt_bookmarks_args args = {
@ -391,11 +389,8 @@ void content_account_bookmarks(struct session* ssn, mastodont_t* api, char** dat
NULL);
}
easprintf(&page, "%s%s",
STR_NULL_EMPTY(status_format),
easprintf(&output, data_bookmarks_page_html, status_format,
STR_NULL_EMPTY(navigation_box));
easprintf(&output, data_bookmarks_page_html, page);
struct base_page b = {
.category = BASE_CAT_BOOKMARKS,
@ -413,7 +408,6 @@ void content_account_bookmarks(struct session* ssn, mastodont_t* api, char** dat
if (status_format) free(status_format);
if (navigation_box) free(navigation_box);
if (output) free(output);
if (page) free(page);
}
void content_account_favourites(struct session* ssn, mastodont_t* api, char** data)
@ -454,12 +448,8 @@ void content_account_favourites(struct session* ssn, mastodont_t* api, char** da
statuses[status_count-1].id,
NULL);
}
easprintf(&page, "%s%s",
STR_NULL_EMPTY(status_format),
STR_NULL_EMPTY(navigation_box));
easprintf(&output, data_favourites_page_html, page);
easprintf(&output, data_favourites_page_html, status_format,
navigation_box ? navigation_box : "");
struct base_page b = {
.category = BASE_CAT_FAVOURITES,
@ -477,5 +467,4 @@ void content_account_favourites(struct session* ssn, mastodont_t* api, char** da
if (status_format) free(status_format);
if (navigation_box) free(navigation_box);
if (output) free(output);
if (page) free(page);
}

View file

@ -185,8 +185,8 @@ void content_notifications(struct session* ssn, mastodont_t* api, char** data)
.exclude_visibilities = 0,
.include_types = 0,
.with_muted = 1,
.max_id = NULL,
.min_id = NULL,
.max_id = ssn->post.max_id,
.min_id = ssn->post.min_id,
.since_id = NULL,
.offset = 0,
.limit = 20,
@ -195,12 +195,12 @@ void content_notifications(struct session* ssn, mastodont_t* api, char** data)
if (mastodont_get_notifications(api, &args, &storage, &notifs, &notifs_len) == 0)
{
notif_html = construct_notifications(api, notifs, notifs_len, NULL);
mstdnt_cleanup_notifications(notifs, notifs_len);
start_id = ssn->post.start_id ? ssn->post.start_id : notifs[0].id;
navigation_box = construct_navigation_box(start_id,
notifs[0].id,
notifs[notifs_len-1].id,
NULL);
mstdnt_cleanup_notifications(notifs, notifs_len);
}
else
notif_html = construct_error(storage.error, E_NOTICE, 1, NULL);
@ -209,7 +209,7 @@ void content_notifications(struct session* ssn, mastodont_t* api, char** data)
easprintf(&page, data_notifications_page_html,
notif_html ? notif_html : "",
navigation_box);
navigation_box ? navigation_box : "");
struct base_page b = {
.category = BASE_CAT_NOTIFICATIONS,

View file

@ -365,6 +365,8 @@ char* construct_status(mastodont_t* api,
size_t favourites_len = 0;
size_t reblogs_len = 0;
if (!status) return NULL;
// If focused, show status interactions
if ((flags & STATUS_FOCUSED) == STATUS_FOCUSED &&
(status->reblogs_count || status->favourites_count))
@ -493,6 +495,7 @@ static char* construct_status_voidwrap(void* passed, size_t index, int* res)
char* construct_statuses(mastodont_t* api, struct mstdnt_status* statuses, size_t size, size_t* ret_size)
{
if (!(statuses && size)) return NULL;
struct status_args args = {
.api = api,
.status = statuses,

View file

@ -4,3 +4,4 @@
<div class="bookmarks-container">
%s
</div>
%s

View file

@ -4,3 +4,4 @@
<div class="favourites-container">
%s
</div>
%s