FetchInventoryDescendents2: Signal to the viewer that folder with UUID.Zero is a bad folder. Don't even go to the backend to ask for it, because that will likely kill the sim. Apparently Firestorm requests folder Zero quite often.
parent
e99be0bb19
commit
b5ac0e1ab8
|
@ -587,6 +587,15 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
|
|
||||||
AddLibraryFolders(fetchFolders, result);
|
AddLibraryFolders(fetchFolders, result);
|
||||||
|
|
||||||
|
// Filter folder Zero right here. Some viewers (Firestorm) send request for folder Zero, which doesn't make sense
|
||||||
|
// and can kill the sim (all root folders have parent_id Zero)
|
||||||
|
LLSDFetchInventoryDescendents zero = fetchFolders.Find(f => f.folder_id == UUID.Zero);
|
||||||
|
if (zero != null)
|
||||||
|
{
|
||||||
|
fetchFolders.Remove(zero);
|
||||||
|
BadFolder(zero, null, bad_folders);
|
||||||
|
}
|
||||||
|
|
||||||
if (fetchFolders.Count > 0)
|
if (fetchFolders.Count > 0)
|
||||||
{
|
{
|
||||||
UUID[] fids = new UUID[fetchFolders.Count];
|
UUID[] fids = new UUID[fetchFolders.Count];
|
||||||
|
@ -600,7 +609,9 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
|
|
||||||
if (fetchedContents == null || (fetchedContents != null && fetchedContents.Length == 0))
|
if (fetchedContents == null || (fetchedContents != null && fetchedContents.Length == 0))
|
||||||
{
|
{
|
||||||
//m_log.WarnFormat("[WEB FETCH INV DESC HANDLER]: Could not get contents of multiple folders for user {0}", fetchFolders[0].owner_id);
|
m_log.WarnFormat("[WEB FETCH INV DESC HANDLER]: Could not get contents of multiple folders for user {0}", fetchFolders[0].owner_id);
|
||||||
|
foreach (LLSDFetchInventoryDescendents freq in fetchFolders)
|
||||||
|
BadFolder(freq, null, bad_folders);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -262,6 +262,31 @@ namespace OpenSim.Capabilities.Handlers.FetchInventory.Tests
|
||||||
count = Regex.Matches(llsdresponse, notecards_folder).Count;
|
count = Regex.Matches(llsdresponse, notecards_folder).Count;
|
||||||
Assert.AreEqual(2, count, "More than 1 notecards folder in response"); // Notecards will also be under root, so 2
|
Assert.AreEqual(2, count, "More than 1 notecards folder in response"); // Notecards will also be under root, so 2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Test_005_FolderZero()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
|
Init();
|
||||||
|
|
||||||
|
FetchInvDescHandler handler = new FetchInvDescHandler(m_scene.InventoryService, null, m_scene);
|
||||||
|
TestOSHttpRequest req = new TestOSHttpRequest();
|
||||||
|
TestOSHttpResponse resp = new TestOSHttpResponse();
|
||||||
|
|
||||||
|
string request = "<llsd><map><key>folders</key><array><map><key>fetch_folders</key><integer>1</integer><key>fetch_items</key><boolean>1</boolean><key>folder_id</key><uuid>";
|
||||||
|
request += UUID.Zero;
|
||||||
|
request += "</uuid><key>owner_id</key><uuid>00000000-0000-0000-0000-000000000000</uuid><key>sort_order</key><integer>1</integer></map></array></map></llsd>";
|
||||||
|
|
||||||
|
string llsdresponse = handler.FetchInventoryDescendentsRequest(request, "/FETCH", string.Empty, req, resp);
|
||||||
|
|
||||||
|
Assert.That(llsdresponse != null, Is.True, "Incorrect null response");
|
||||||
|
Assert.That(llsdresponse != string.Empty, Is.True, "Incorrect empty response");
|
||||||
|
Assert.That(llsdresponse.Contains("bad_folders</key><array><uuid>00000000-0000-0000-0000-000000000000"), Is.True, "Folder Zero should be a bad folder");
|
||||||
|
|
||||||
|
Console.WriteLine(llsdresponse);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue