From 2ba2dab3a740506791d75ca5b34f3f6d7e1c8c8b Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Wed, 14 Apr 2010 14:53:21 +0000 Subject: 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 --- content/llcache.c | 25 ++++++++++++++++++++----- 1 file 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; } -- cgit v1.2.3