summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2012-02-16 14:57:30 -0800
committerMerov Linden <merov@lindenlab.com>2012-02-16 14:57:30 -0800
commit155a171180be2df4500e7c6d03df3f99bf4231e7 (patch)
treebc57e35ad1dc2d4a31cc77ac02cb10a23a165756 /indra
parent632c8c138c94fae24729ef75ac29967cd4758eb3 (diff)
EXP-1896 : Prevent recursively copying of folders onto themselves
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llinventoryfunctions.cpp11
-rw-r--r--indra/newview/llinventoryfunctions.h2
2 files changed, 10 insertions, 3 deletions
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 4fb06f82c1..236c997ef6 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -240,11 +240,15 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s
void copy_inventory_category(LLInventoryModel* model,
LLViewerInventoryCategory* cat,
- const LLUUID& parent_id)
+ const LLUUID& parent_id,
+ const LLUUID& root_copy_id)
{
// Create the initial folder
LLUUID new_cat_uuid = gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName());
model->notifyObservers();
+
+ // We need to exclude the initial root of the copy to avoid recursively copying the copy, etc...
+ LLUUID root_id = (root_copy_id.isNull() ? new_cat_uuid : root_copy_id);
// Get the content of the folder
LLInventoryModel::cat_array_t* cat_array;
@@ -270,7 +274,10 @@ void copy_inventory_category(LLInventoryModel* model,
for (LLInventoryModel::cat_array_t::iterator iter = cat_array_copy.begin(); iter != cat_array_copy.end(); iter++)
{
LLViewerInventoryCategory* category = *iter;
- copy_inventory_category(model, category, new_cat_uuid);
+ if (category->getUUID() != root_id)
+ {
+ copy_inventory_category(model, category, new_cat_uuid, root_id);
+ }
}
}
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 72c48c64f2..b3d9f4b966 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -73,7 +73,7 @@ void remove_category(LLInventoryModel* model, const LLUUID& cat_id);
void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::string& new_name);
-void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id);
+void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id = LLUUID::null);
// Generates a string containing the path to the item specified by item_id.
void append_path(const LLUUID& id, std::string& path);