diff options
author | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2010-04-14 14:53:21 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2010-04-14 14:53:21 +0000 |
commit | 2ba2dab3a740506791d75ca5b34f3f6d7e1c8c8b (patch) | |
tree | 37f0301c1eb5c13df4513ac6b59a740312025343 /content/llcache.c | |
parent | b56886d0ee16fea33a9d7ffd8207baf0e16425bb (diff) | |
download | netsurf-2ba2dab3a740506791d75ca5b34f3f6d7e1c8c8b.tar.gz netsurf-2ba2dab3a740506791d75ca5b34f3f6d7e1c8c8b.tar.bz2 |
Eat any #fragment in llcache_object_retrieve -- fixing double-fragment issues at the top level, and preventing fragment(ed) redirects from confusing the issue
svn path=/trunk/netsurf/; revision=10399
Diffstat (limited to 'content/llcache.c')
-rw-r--r-- | content/llcache.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/content/llcache.c b/content/llcache.c index 9f9a1cf45..4394d186d 100644 --- a/content/llcache.c +++ b/content/llcache.c @@ -533,6 +533,7 @@ nserror llcache_object_retrieve(const char *url, uint32_t flags, bool has_query; url_func_result res; struct url_components components; + char *defragmented_url; #ifdef LLCACHE_TRACE LOG(("Retrieve %s (%x, %s, %p)", url, flags, referer, post)); @@ -551,30 +552,42 @@ nserror llcache_object_retrieve(const char *url, uint32_t flags, return NSERROR_NOMEM; has_query = (components.query != NULL); + + components.fragment = NULL; + + defragmented_url = url_reform_components(&components); url_destroy_components(&components); + if (defragmented_url == NULL) + return NSERROR_NOMEM; + if (flags & LLCACHE_RETRIEVE_FORCE_FETCH || post != NULL) { /* Create new object */ - error = llcache_object_new(url, &obj); - if (error != NSERROR_OK) + error = llcache_object_new(defragmented_url, &obj); + if (error != NSERROR_OK) { + free(defragmented_url); return error; + } /* Attempt to kick-off fetch */ error = llcache_object_fetch(obj, flags, referer, post, redirect_count); if (error != NSERROR_OK) { llcache_object_destroy(obj); + free(defragmented_url); return error; } /* Add new object to uncached list */ llcache_object_add_to_list(obj, &llcache_uncached_objects); } else { - error = llcache_object_retrieve_from_cache(url, flags, referer, + error = llcache_object_retrieve_from_cache(defragmented_url, flags, referer, post, redirect_count, &obj); - if (error != NSERROR_OK) + if (error != NSERROR_OK) { + free(defragmented_url); return error; + } /* Returned object is already in the cached list */ } @@ -586,7 +599,9 @@ nserror llcache_object_retrieve(const char *url, uint32_t flags, #endif *result = obj; - + + free(defragmented_url); + return NSERROR_OK; } |