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
OpenSim/Capabilities/Handlers/FetchInventory
|
@ -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