From ba70d610519e4a46fe460c6f1b0898673abce4be Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Thu, 1 Jan 2009 22:06:59 +0100 Subject: [PATCH] 762: Instead of setting a bare pointer for task.target.frame always use the dynamically allocated value. null_or_stracpy and mem_free_set macros are used. Slower, but safer. --- src/session/download.c | 6 +++--- src/session/session.c | 8 ++++---- src/session/task.c | 7 ++++--- src/viewer/text/link.c | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/session/download.c b/src/session/download.c index 27390bb4..00cb83bc 100644 --- a/src/session/download.c +++ b/src/session/download.c @@ -1063,14 +1063,14 @@ tp_display(struct type_query *type_query) struct view_state *vs; struct session *ses = type_query->ses; struct uri *loading_uri = ses->loading_uri; - unsigned char *target_frame = ses->task.target.frame; + unsigned char *target_frame = null_or_stracpy(ses->task.target.frame); ses->loading_uri = type_query->uri; - ses->task.target.frame = type_query->target_frame; + mem_free_set(&ses->task.target.frame, null_or_stracpy(type_query->target_frame)); vs = ses_forward(ses, /* type_query->frame */ 0); if (vs) vs->plain = 1; ses->loading_uri = loading_uri; - ses->task.target.frame = target_frame; + mem_free_set(&ses->task.target.frame, target_frame); if (/* !type_query->frame */ 1) { struct download *old = &type_query->download; diff --git a/src/session/session.c b/src/session/session.c index 7e22a9aa..d87e6a1b 100644 --- a/src/session/session.c +++ b/src/session/session.c @@ -659,13 +659,13 @@ file_loading_callback(struct download *download, struct file_to_load *ftl) if (ftl->cached && !ftl->cached->redirect_get && download->pri != PRI_CSS) { struct session *ses = ftl->ses; struct uri *loading_uri = ses->loading_uri; - unsigned char *target_frame = ses->task.target.frame; + unsigned char *target_frame = null_or_stracpy(ses->task.target.frame); ses->loading_uri = ftl->uri; - ses->task.target.frame = ftl->target_frame; + mem_free_set(&ses->task.target.frame, null_or_stracpy(ftl->target_frame)); setup_download_handler(ses, &ftl->download, ftl->cached, 1); ses->loading_uri = loading_uri; - ses->task.target.frame = target_frame; + mem_free_set(&ses->task.target.frame, target_frame); } doc_loading_callback(download, ftl->ses); @@ -1237,7 +1237,7 @@ reload_frame(struct session *ses, unsigned char *name, loc->download.data = ses; loc->download.callback = (download_callback_T *) doc_loading_callback; - ses->task.target.frame = name; + mem_free_set(&ses->task.target.frame, null_or_stracpy(name)); load_uri(loc->vs.uri, ses->referrer, &loc->download, PRI_MAIN, cache_mode, -1); diff --git a/src/session/task.c b/src/session/task.c index b38c28e4..e2c4f677 100644 --- a/src/session/task.c +++ b/src/session/task.c @@ -49,6 +49,7 @@ free_task(struct session *ses) ses->loading_uri = NULL; } ses->task.type = TASK_NONE; + mem_free_set(&ses->task.target.frame, NULL); } void @@ -78,7 +79,7 @@ ses_load(struct session *ses, struct uri *uri, unsigned char *target_frame, ses->loading_uri = uri; ses->task.type = task_type; - ses->task.target.frame = target_frame; + mem_free_set(&ses->task.target.frame, null_or_stracpy(target_frame)); ses->task.target.location = target_location; load_uri(ses->loading_uri, ses->referrer, &ses->loading, @@ -231,7 +232,7 @@ ses_goto(struct session *ses, struct uri *uri, unsigned char *target_frame, task->uri = get_uri_reference(uri); task->cache_mode = cache_mode; task->session_task.type = task_type; - task->session_task.target.frame = target_frame; + task->session_task.target.frame = null_or_stracpy(target_frame); task->session_task.target.location = target_location; if (malicious_uri) { @@ -322,7 +323,7 @@ x: del_from_history(&ses->history, loc); destroy_location(loc); } - ses->task.target.frame = NULL; + mem_free_set(&ses->task.target.frame, NULL); goto x; } diff --git a/src/viewer/text/link.c b/src/viewer/text/link.c index fbabd9dd..a9021b0f 100644 --- a/src/viewer/text/link.c +++ b/src/viewer/text/link.c @@ -970,7 +970,7 @@ goto_current_link(struct session *ses, struct document_view *doc_view, int do_re if (link->type == LINK_MAP) { /* TODO: Test reload? */ - goto_imgmap(ses, uri, null_or_stracpy(link->target)); + goto_imgmap(ses, uri, link->target); } else { enum cache_mode mode = do_reload ? CACHE_MODE_FORCE_RELOAD -- 2.11.4.GIT