summaryrefslogtreecommitdiffstats
path: root/chrome_frame
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-10 21:29:56 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-10 21:29:56 +0000
commit131c7d21f8d44f015acd121d3d1e7133463905af (patch)
tree7746ba0c704b106c13447c229e511d0bcb5a0da7 /chrome_frame
parent327c709e1c8ae25359382ae2d392d73d381d4a4f (diff)
downloadchromium_src-131c7d21f8d44f015acd121d3d1e7133463905af.zip
chromium_src-131c7d21f8d44f015acd121d3d1e7133463905af.tar.gz
chromium_src-131c7d21f8d44f015acd121d3d1e7133463905af.tar.bz2
Fix a crash reported in ChromeFrame on the crash server, which occurs because the VARIANT representing
the URL has a NULL bstrVal. Fix is to check for the same. Fixes bug http://code.google.com/p/chromium/issues/detail?id=37872 Bug=37872 Review URL: http://codereview.chromium.org/822005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41208 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame')
-rw-r--r--chrome_frame/bho.cc25
1 files changed, 15 insertions, 10 deletions
diff --git a/chrome_frame/bho.cc b/chrome_frame/bho.cc
index 9f64753..e275707 100644
--- a/chrome_frame/bho.cc
+++ b/chrome_frame/bho.cc
@@ -94,23 +94,28 @@ STDMETHODIMP Bho::SetSite(IUnknown* site) {
STDMETHODIMP Bho::BeforeNavigate2(IDispatch* dispatch, VARIANT* url,
VARIANT* flags, VARIANT* target_frame_name, VARIANT* post_data,
VARIANT* headers, VARIANT_BOOL* cancel) {
+ if (!url || url->vt != VT_BSTR || url->bstrVal == NULL) {
+ DLOG(WARNING) << "Invalid URL passed in";
+ return S_OK;
+ }
+
ScopedComPtr<IWebBrowser2> web_browser2;
if (dispatch)
web_browser2.QueryFrom(dispatch);
- if (!web_browser2 || url->vt != VT_BSTR) {
+ if (!web_browser2) {
NOTREACHED() << "Can't find WebBrowser2 with given dispatch";
- } else {
- DLOG(INFO) << "BeforeNavigate2: " << url->bstrVal;
- ScopedComPtr<IBrowserService> browser_service;
- DoQueryService(SID_SShellBrowser, web_browser2, browser_service.Receive());
- if (!browser_service || !CheckForCFNavigation(browser_service, false)) {
- referrer_.clear();
- }
- url_ = url->bstrVal;
- ProcessOptInUrls(web_browser2, url->bstrVal);
+ return S_OK;
}
+ DLOG(INFO) << "BeforeNavigate2: " << url->bstrVal;
+ ScopedComPtr<IBrowserService> browser_service;
+ DoQueryService(SID_SShellBrowser, web_browser2, browser_service.Receive());
+ if (!browser_service || !CheckForCFNavigation(browser_service, false)) {
+ referrer_.clear();
+ }
+ url_ = url->bstrVal;
+ ProcessOptInUrls(web_browser2, url->bstrVal);
return S_OK;
}