From 2eb50c393120917f9c98ad1fc32bb094e6cda663 Mon Sep 17 00:00:00 2001 From: gnembon Date: Thu, 17 Oct 2019 01:03:53 -0300 Subject: [PATCH] safe file names --- .../java/carpet/script/CarpetExpression.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/carpet/script/CarpetExpression.java b/src/main/java/carpet/script/CarpetExpression.java index 2ccfbb78..79120ef8 100644 --- a/src/main/java/carpet/script/CarpetExpression.java +++ b/src/main/java/carpet/script/CarpetExpression.java @@ -2940,7 +2940,14 @@ public class CarpetExpression { String file = null; if (lv.size()>0) - file = lv.get(0).evalValue(c).getString(); + { + String origfile = lv.get(0).evalValue(c).getString(); + file = origfile.toLowerCase(Locale.ROOT).replaceAll("[^A-Za-z0-9]", ""); + if (file.isEmpty()) + { + throw new InternalExpressionException("Cannot use "+file+" as resource name - must have some letters and numbers"); + } + } Tag state = ((CarpetContext)c).host.getGlobalState(file); if (state == null) return (cc, tt) -> Value.NULL; @@ -2955,7 +2962,14 @@ public class CarpetExpression Value val = lv.get(0).evalValue(c); String file = null; if (lv.size()>1) - file = lv.get(1).evalValue(c).getString(); + { + String origfile = lv.get(0).evalValue(c).getString(); + file = origfile.toLowerCase(Locale.ROOT).replaceAll("[^A-Za-z0-9]", ""); + if (file.isEmpty()) + { + throw new InternalExpressionException("Cannot use "+file+" as resource name - must have some letters and numbers"); + } + } NBTSerializableValue tagValue = (val instanceof NBTSerializableValue) ? (NBTSerializableValue) val : new NBTSerializableValue(val.getString());