diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-11-22 13:35:41 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-11-22 13:35:41 +0000 |
commit | 2562f7e8c2840e2ae69b170e9bde7aeef8bc3b73 (patch) | |
tree | bd8d169bbd4ad3c7196bad2427706af66d45652d | |
parent | c2fd55cbabbdca9c2110b153355850196d41319f (diff) | |
download | netsurf-2562f7e8c2840e2ae69b170e9bde7aeef8bc3b73.tar.gz netsurf-2562f7e8c2840e2ae69b170e9bde7aeef8bc3b73.tar.bz2 |
Avoid NULL pointer dereferences
svn path=/trunk/netsurf/; revision=9684
-rw-r--r-- | desktop/browser.c | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index 12d1e18c0..cf28006c5 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1265,21 +1265,31 @@ void browser_window_find_target_internal(struct browser_window *bw, return; depth++; - for (i = 0; i < (bw->cols * bw->rows); i++) { - if ((bw->children[i].name) && - (!strcasecmp(bw->children[i].name, target))) { - if ((page == &bw->children[i]) || (depth > *rdepth)) { - *rdepth = depth; - *bw_target = &bw->children[i]; + + if (bw->children != NULL) { + for (i = 0; i < (bw->cols * bw->rows); i++) { + if ((bw->children[i].name) && + (!strcasecmp(bw->children[i].name, + target))) { + if ((page == &bw->children[i]) || + (depth > *rdepth)) { + *rdepth = depth; + *bw_target = &bw->children[i]; + } } + if (bw->children[i].children) + browser_window_find_target_internal( + &bw->children[i], + target, depth, page, + rdepth, bw_target); } - if (bw->children[i].children) - browser_window_find_target_internal(&bw->children[i], + } + + if (bw->iframes != NULL) { + for (i = 0; i < bw->iframe_count; i++) + browser_window_find_target_internal(&bw->iframes[i], target, depth, page, rdepth, bw_target); } - for (i = 0; i < bw->iframe_count; i++) - browser_window_find_target_internal(&bw->iframes[i], target, - depth, page, rdepth, bw_target); } |