summaryrefslogtreecommitdiff
path: root/content/llcache.c
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@netsurf-browser.org>2010-04-14 14:53:21 +0000
committerDaniel Silverstone <dsilvers@netsurf-browser.org>2010-04-14 14:53:21 +0000
commit2ba2dab3a740506791d75ca5b34f3f6d7e1c8c8b (patch)
tree37f0301c1eb5c13df4513ac6b59a740312025343 /content/llcache.c
parentb56886d0ee16fea33a9d7ffd8207baf0e16425bb (diff)
downloadnetsurf-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.c25
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;
}