Fix symlink detection.

Dieser Commit ist enthalten in:
wizjany 2019-03-15 09:10:51 -04:00
Ursprung 4191f017f1
Commit 18414fe3b5

Datei anzeigen

@ -284,12 +284,18 @@ public final class WorldEdit {
Path filePath = Paths.get(f.toURI()).normalize(); Path filePath = Paths.get(f.toURI()).normalize();
Path dirPath = Paths.get(dir.toURI()).normalize(); Path dirPath = Paths.get(dir.toURI()).normalize();
if (!filePath.startsWith(dirPath) boolean inDir = filePath.startsWith(dirPath);
|| (!getConfiguration().allowSymlinks && !filePath.toRealPath().startsWith(dirPath))) { Path existingParent = filePath;
do {
existingParent = existingParent.getParent();
} while (existingParent != null && !existingParent.toFile().exists());
boolean isSym = existingParent != null && !existingParent.toRealPath().equals(existingParent);
if (!inDir || (!getConfiguration().allowSymlinks && isSym)) {
throw new FilenameResolutionException(filename, "Path is outside allowable root"); throw new FilenameResolutionException(filename, "Path is outside allowable root");
} }
return f; return filePath.toFile();
} catch (IOException e) { } catch (IOException e) {
throw new FilenameResolutionException(filename, "Failed to resolve path"); throw new FilenameResolutionException(filename, "Failed to resolve path");
} }