mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-19 23:42:53 +08:00
Issue #104: Bug in FileUtils.copyDirectory & moveDirectory
Adding better test to see if a directory is being moved/copied into itself. Copy /sdcard/myDir to /sdcard/myDir-backup is okay but Copy /sdcard/myDir to /sdcard/myDir/backup should thow an INVALID_MODIFICATION_ERR
This commit is contained in:
parent
3ce0fc4897
commit
740e50ce61
@ -411,7 +411,7 @@ public class FileUtils extends Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check to make sure we are not copying the directory into itself
|
// Check to make sure we are not copying the directory into itself
|
||||||
if (destinationDir.getAbsolutePath().startsWith(srcDir.getAbsolutePath())) {
|
if (isCopyOnItself(srcDir.getAbsolutePath(), destinationDir.getAbsolutePath())) {
|
||||||
throw new InvalidModificationException("Can't copy itself into itself");
|
throw new InvalidModificationException("Can't copy itself into itself");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,6 +435,26 @@ public class FileUtils extends Plugin {
|
|||||||
return getEntry(destinationDir);
|
return getEntry(destinationDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check to see if the user attempted to copy an entry into its parent without changing its name,
|
||||||
|
* or attempted to copy a directory into a directory that it contains directly or indirectly.
|
||||||
|
*
|
||||||
|
* @param srcDir
|
||||||
|
* @param destinationDir
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean isCopyOnItself(String src, String dest) {
|
||||||
|
|
||||||
|
// This weird test is to determine if we are copying or moving a directory into itself.
|
||||||
|
// Copy /sdcard/myDir to /sdcard/myDir-backup is okay but
|
||||||
|
// Copy /sdcard/myDir to /sdcard/myDir/backup should thow an INVALID_MODIFICATION_ERR
|
||||||
|
if (dest.startsWith(src) && dest.indexOf(File.separator, src.length()-1) != -1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Move a file
|
* Move a file
|
||||||
*
|
*
|
||||||
@ -480,8 +500,8 @@ public class FileUtils extends Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check to make sure we are not copying the directory into itself
|
// Check to make sure we are not copying the directory into itself
|
||||||
if (destinationDir.getAbsolutePath().startsWith(srcDir.getAbsolutePath())) {
|
if (isCopyOnItself(srcDir.getAbsolutePath(), destinationDir.getAbsolutePath())) {
|
||||||
throw new InvalidModificationException("Can't copy itself into itself");
|
throw new InvalidModificationException("Can't move itself into itself");
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the destination directory already exists and is empty then delete it. This is according to spec.
|
// If the destination directory already exists and is empty then delete it. This is according to spec.
|
||||||
|
Loading…
Reference in New Issue
Block a user