fix for bug #383678: moving a folder to its grandchild folder (or deeper) results in datalossr=dietrich

This commit is contained in:
sspitzer@mozilla.org 2007-06-12 08:36:16 -07:00
Родитель d45d0d587f
Коммит c0bd25b2ab
2 изменённых файлов: 19 добавлений и 2 удалений

Просмотреть файл

@ -1444,10 +1444,10 @@ nsNavBookmarks::MoveItem(PRInt64 aItemId, PRInt64 aNewParent, PRInt32 aIndex)
// Make sure aNewParent is not aFolder or a subfolder of aFolder
if (itemType == TYPE_FOLDER) {
mozStorageStatementScoper scope(mDBGetItemProperties);
PRInt64 p = aNewParent;
while (p) {
mozStorageStatementScoper scope(mDBGetItemProperties);
if (p == aItemId) {
return NS_ERROR_INVALID_ARG;
}

Просмотреть файл

@ -316,9 +316,26 @@ function run_test() {
// Test expected failure of moving a folder to be its own parent
try {
bmsvc.moveItem(workFolder, workFolder, bmsvc.DEFAULT_INDEX);
do_throw("moveItem() allowed moving a folder to be it's own parent.");
do_throw("moveItem() allowed moving a folder to be its own parent.");
} catch (e) {}
// Test expected failure of moving a folder to be a child of its child
// or of its grandchild. see bug #383678
var childFolder = bmsvc.createFolder(workFolder, "childFolder", bmsvc.DEFAULT_INDEX);
do_check_eq(observer._itemAddedId, childFolder);
do_check_eq(observer._itemAddedParent, workFolder);
var grandchildFolder = bmsvc.createFolder(childFolder, "grandchildFolder", bmsvc.DEFAULT_INDEX);
do_check_eq(observer._itemAddedId, grandchildFolder);
do_check_eq(observer._itemAddedParent, childFolder);
try {
bmsvc.moveItem(workFolder, childFolder, bmsvc.DEFAULT_INDEX);
do_throw("moveItem() allowed moving a folder to be a child of its child");
} catch (e) {}
try {
bmsvc.moveItem(workFolder, grandchildFolder, bmsvc.DEFAULT_INDEX);
do_throw("moveItem() allowed moving a folder to be a child of its grandchild");
} catch (e) {}
// test insertSeparator and removeChildAt
// XXX - this should also query bookmarks for the folder children
// and then test the node type at our index