From 800988aae73a20bd709ec8f4c340c8f16a791ae0 Mon Sep 17 00:00:00 2001 From: Jordan Date: Thu, 23 Jun 2022 17:32:21 +0100 Subject: [PATCH] Assume a file not being in a subdirectory of root means a symlink is used (#1838) --- .../java/com/sk89q/worldedit/command/UtilityCommands.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java index 1037df0b1..4e516cede 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java @@ -71,6 +71,7 @@ import com.sk89q.worldedit.util.formatting.component.SubtleFormat; import com.sk89q.worldedit.util.formatting.text.Component; import com.sk89q.worldedit.util.formatting.text.TextComponent; import com.sk89q.worldedit.util.formatting.text.format.TextColor; +import com.sk89q.worldedit.util.io.file.FilenameResolutionException; import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.block.BlockTypes; import org.enginehub.piston.annotation.Command; @@ -78,7 +79,6 @@ import org.enginehub.piston.annotation.CommandContainer; import org.enginehub.piston.annotation.param.Arg; import org.enginehub.piston.annotation.param.ArgFlag; import org.enginehub.piston.annotation.param.Switch; -import org.enginehub.piston.exception.StopExecutionException; import javax.imageio.ImageIO; import java.awt.RenderingHints; @@ -876,8 +876,9 @@ public class UtilityCommands { } } try { - if (!MainUtil.isInSubDirectory(root, file)) { - throw new StopExecutionException(TextComponent.of("Invalid path")); + // Assume a file not being in a subdirectory of root means a symlink is used + if (!MainUtil.isInSubDirectory(root, file) && !WorldEdit.getInstance().getConfiguration().allowSymlinks) { + throw new FilenameResolutionException(name, Caption.of("worldedit.error.file-resolution.outside-root")); } } catch (IOException ignored) { }