From d18b3d2aff6f9f6c7c2ac1a26f5ac8e94fc8d9a8 Mon Sep 17 00:00:00 2001
From: Lynx Linden <lynx@lindenlab.com>
Date: Thu, 26 Aug 2010 09:27:22 +0100
Subject: [PATCH] EXT-7901 FIXED: Follow up fix to remove short-term hack.

As advertized, I have removed the short-term hack that I put in place
to make release note URLs work. I have now put in place a more general
and correct solution. The key observeration from Roxie is that SLE
SLurls should have the same hostname as the grid host. So now, URLs
like http://google.com/app are no longer categorized as a SLurl and
produce errors when you click on them.
---
 indra/newview/llslurl.cpp            | 21 +++++++++++----------
 indra/newview/tests/llslurl_test.cpp |  3 +++
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp
index 0308f5e632a..4cf1df16555 100644
--- a/indra/newview/llslurl.cpp
+++ b/indra/newview/llslurl.cpp
@@ -44,7 +44,6 @@ const char* LLSLURL::SLURL_COM		         = "slurl.com";
 // version is required also.
 
 const char* LLSLURL::WWW_SLURL_COM				 = "www.slurl.com";
-const char* LLSLURL::SECONDLIFE_COM				 = "secondlife.com";
 const char* LLSLURL::MAPS_SECONDLIFE_COM		 = "maps.secondlife.com";
 const char* LLSLURL::SLURL_X_GRID_LOCATION_INFO_SCHEME = "x-grid-location-info";
 const char* LLSLURL::SLURL_APP_PATH              = "app";
@@ -183,15 +182,6 @@ LLSLURL::LLSLURL(const std::string& slurl)
 		   (slurl_uri.scheme() == LLSLURL::SLURL_HTTPS_SCHEME) || 
 		   (slurl_uri.scheme() == LLSLURL::SLURL_X_GRID_LOCATION_INFO_SCHEME))
 		{
-			// *HACK: ignore http://secondlife.com/ URLs so that we can use
-			// http://secondlife.com/app/ redirect URLs
-			// This is only necessary while the server returns Release Note
-			// urls using this format rather that pointing to the wiki
-			if ((slurl_uri.scheme() == LLSLURL::SLURL_HTTP_SCHEME ||
-				 slurl_uri.scheme() == LLSLURL::SLURL_HTTPS_SCHEME) &&
-				slurl_uri.hostName() == LLSLURL::SECONDLIFE_COM)
-			  return;
-
 		    // We're dealing with either a Standalone style slurl or slurl.com slurl
 		  if ((slurl_uri.hostName() == LLSLURL::SLURL_COM) ||
 		      (slurl_uri.hostName() == LLSLURL::WWW_SLURL_COM) || 
@@ -202,6 +192,17 @@ LLSLURL::LLSLURL(const std::string& slurl)
 			}
 		    else
 			{
+				// Don't try to match any old http://<host>/ URL as a SLurl.
+				// SLE SLurls will have the grid hostname in the URL, so only
+				// match http URLs if the hostname matches the grid hostname
+				// (or its a slurl.com or maps.secondlife.com URL).
+				if ((slurl_uri.scheme() == LLSLURL::SLURL_HTTP_SCHEME ||
+					 slurl_uri.scheme() == LLSLURL::SLURL_HTTPS_SCHEME) &&
+					slurl_uri.hostName() != LLGridManager::getInstance()->getGrid())
+				{
+					return;
+				}
+
 				// As it's a Standalone grid/open, we will always have a hostname, as Standalone/open  style
 				// urls are properly formed, unlike the stinky maingrid style
 				mGrid = slurl_uri.hostName();
diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp
index 753151bdd80..91f316666c7 100644
--- a/indra/newview/tests/llslurl_test.cpp
+++ b/indra/newview/tests/llslurl_test.cpp
@@ -145,6 +145,7 @@ namespace tut
 		ensure_equals(" slurl, region + coords", slurl.getSLURLString(), 
 					  "http://maps.secondlife.com/secondlife/my%20region/1/2/3");	
 		
+		LLGridManager::getInstance()->setGridChoice("my.grid.com");		
 		slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3");
 		ensure_equals("grid slurl, region + coords - type", slurl.getType(), LLSLURL::LOCATION);
 		ensure_equals("grid slurl, region + coords", slurl.getSLURLString(), 
@@ -201,6 +202,7 @@ namespace tut
 		ensure_equals("region" , "myregion", slurl.getRegion());
 		ensure_equals("grid4", "util.aditi.lindenlab.com", slurl.getGrid());		
 		
+		LLGridManager::getInstance()->setGridChoice("my.grid.com");
 		slurl = LLSLURL("https://my.grid.com/app/foo/bar?12345");
 		ensure_equals("app", slurl.getType(), LLSLURL::APP);		
 		ensure_equals("appcmd", slurl.getAppCmd(), "foo");
@@ -241,6 +243,7 @@ namespace tut
 	template<> template<>
 	void slurlTestObject::test<3>()
 	{
+		LLGridManager::getInstance()->setGridChoice("my.grid.com");		
 		LLSLURL slurl = LLSLURL("https://my.grid.com/region/my%20region/1/2/3");
 		ensure_equals("login string", slurl.getLoginString(), "uri:my region&amp;1&amp;2&amp;3");
 		ensure_equals("location string", slurl.getLocationString(), "my region/1/2/3");
-- 
GitLab