summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorRichard Wilson <rjw@netsurf-browser.org>2006-09-05 17:59:29 +0000
committerRichard Wilson <rjw@netsurf-browser.org>2006-09-05 17:59:29 +0000
commit96b8fa5d4617a16459c5dec31e56c724d491bc55 (patch)
treecb1ec2d2939b045782cdbeff83d186be6686c66b /desktop
parent4994441579b1deb8952ab57d1d649462d7ef0dff (diff)
downloadnetsurf-96b8fa5d4617a16459c5dec31e56c724d491bc55.tar.gz
netsurf-96b8fa5d4617a16459c5dec31e56c724d491bc55.tar.bz2
Limit maximum frame nesting level.
svn path=/trunk/netsurf/; revision=2918
Diffstat (limited to 'desktop')
-rw-r--r--desktop/browser.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/desktop/browser.c b/desktop/browser.c
index a81df9274..12bec0f68 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -51,6 +51,9 @@
/** maximum frame resize margin */
#define FRAME_RESIZE 6
+/** maximum frame depth */
+#define FRAME_DEPTH 8
+
/** browser window which is being redrawn. Valid only during redraw. */
struct browser_window *current_redraw_browser;
@@ -746,10 +749,20 @@ void browser_window_go_post(struct browser_window *bw, const char *url,
char *hash;
url_func_result res;
char url_buf[256];
+ int depth = 0;
+ struct browser_window *cur;
LOG(("bw %p, url %s", bw, url));
assert(bw);
assert(url);
+
+ /* don't allow massively nested framesets */
+ for (cur = bw; cur->parent; cur = cur->parent)
+ depth++;
+ if (depth > FRAME_DEPTH) {
+ LOG(("frame depth too high."));
+ return;
+ }
res = url_normalize(url, &url2);
if (res != URL_FUNC_OK) {