diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-10 21:29:56 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-10 21:29:56 +0000 |
commit | 131c7d21f8d44f015acd121d3d1e7133463905af (patch) | |
tree | 7746ba0c704b106c13447c229e511d0bcb5a0da7 /chrome_frame | |
parent | 327c709e1c8ae25359382ae2d392d73d381d4a4f (diff) | |
download | chromium_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.cc | 25 |
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; } |