summaryrefslogtreecommitdiff
path: root/utils/nsurl.c
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2014-02-15 12:32:59 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2014-02-15 12:32:59 +0000
commit4a59399cd799a23149b953e9bb38c88275b29936 (patch)
tree9c076fe664345e9d24070c052c48623e4e95c53e /utils/nsurl.c
parent03cb9a302a6066b6c89130fd824ba0be37116922 (diff)
downloadnetsurf-4a59399cd799a23149b953e9bb38c88275b29936.tar.gz
netsurf-4a59399cd799a23149b953e9bb38c88275b29936.tar.bz2
Ensure allocation includes space for fragment.
Diffstat (limited to 'utils/nsurl.c')
-rw-r--r--utils/nsurl.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/utils/nsurl.c b/utils/nsurl.c
index f053bce6d..3a9a8c1d1 100644
--- a/utils/nsurl.c
+++ b/utils/nsurl.c
@@ -2032,8 +2032,9 @@ nserror nsurl_refragment(const nsurl *url, lwc_string *frag, nsurl **new_url)
nserror nsurl_replace_query(const nsurl *url, const char *query,
nsurl **new_url)
{
- int query_len;
- int base_len;
+ int query_len; /* Length of new query string, including '?' */
+ int frag_len = 0; /* Length of fragment, including '#' */
+ int base_len; /* Length of URL up to start of query */
char *pos;
size_t len;
lwc_string *lwc_query;
@@ -2051,11 +2052,12 @@ nserror nsurl_replace_query(const nsurl *url, const char *query,
base_len -= lwc_string_length(url->components.query);
}
if (url->components.fragment != NULL) {
- base_len -= 1 + lwc_string_length(url->components.fragment);
+ frag_len = 1 + lwc_string_length(url->components.fragment);
+ base_len -= frag_len;
}
/* Set new_url's length */
- len = base_len + query_len;
+ len = base_len + query_len + frag_len;
/* Create NetSurf URL object */
*new_url = malloc(sizeof(nsurl) + len + 1); /* Add 1 for \0 */