Index: content/browser/download/download_item_impl.cc |
diff --git a/content/browser/download/download_item_impl.cc b/content/browser/download/download_item_impl.cc |
index 1708a63c50cabe56137073dea3f94dff5acf0a38..a1fa926b3182450680c6668ac0a42fcb970c4714 100644 |
--- a/content/browser/download/download_item_impl.cc |
+++ b/content/browser/download/download_item_impl.cc |
@@ -474,8 +474,7 @@ bool DownloadItemImpl::IsComplete() const { |
} |
const GURL& DownloadItemImpl::GetURL() const { |
- return url_chain_.empty() ? |
- GURL::EmptyGURL() : url_chain_.back(); |
+ return url_chain_.empty() ? GURL::EmptyGURL() : url_chain_.back(); |
} |
const std::vector<GURL>& DownloadItemImpl::GetUrlChain() const { |
@@ -483,7 +482,9 @@ const std::vector<GURL>& DownloadItemImpl::GetUrlChain() const { |
} |
const GURL& DownloadItemImpl::GetOriginalUrl() const { |
- return url_chain_.front(); |
+ // Be careful about taking the front() of possibly-empty vectors! |
+ // http://crbug.com/190096 |
+ return url_chain_.empty() ? GURL::EmptyGURL() : url_chain_.front(); |
} |
const GURL& DownloadItemImpl::GetReferrerUrl() const { |
@@ -721,12 +722,12 @@ std::string DownloadItemImpl::DebugString(bool verbose) const { |
if (!url_chain_.empty()) { |
std::vector<GURL>::const_iterator iter = url_chain_.begin(); |
std::vector<GURL>::const_iterator last = url_chain_.end(); |
- url_list = (*iter).spec(); |
+ url_list = (*iter).is_valid() ? (*iter).spec() : "<invalid>"; |
++iter; |
for ( ; verbose && (iter != last); ++iter) { |
url_list += " ->\n\t"; |
const GURL& next_url = *iter; |
- url_list += next_url.spec(); |
+ url_list += next_url.is_valid() ? next_url.spec() : "<invalid>"; |
} |
} |