Skip to content

Commit b96825e

Browse files
authored
Disable global megabuffer (#3577)
1 parent 6584546 commit b96825e

1 file changed

Lines changed: 17 additions & 11 deletions

File tree

  • worldedit-core/src/main/java/com/sk89q/worldedit/internal/expression

worldedit-core/src/main/java/com/sk89q/worldedit/internal/expression/Functions.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,18 @@ private static void addStaticFunctionHandles(
133133
map.put("swap", lookup.findStatic(Functions.class, "swap",
134134
methodType(double.class, Variable.class, Variable.class)
135135
));
136-
map.put("gmegabuf", lookup.findStatic(Functions.class, "gmegabuf",
137-
methodType(double.class, double.class)
138-
));
139-
map.put("gmegabuf", lookup.findStatic(Functions.class, "gmegabuf",
140-
methodType(double.class, double.class, double.class)
141-
));
142-
map.put("gclosest", lookup.findStatic(Functions.class, "gclosest",
143-
methodType(double.class, double.class, double.class, double.class, double.class,
144-
double.class, double.class
145-
)
146-
));
136+
// FAWE - disable global megabuffer methods
137+
// map.put("gmegabuf", lookup.findStatic(Functions.class, "gmegabuf",
138+
// methodType(double.class, double.class)
139+
// ));
140+
// map.put("gmegabuf", lookup.findStatic(Functions.class, "gmegabuf",
141+
// methodType(double.class, double.class, double.class)
142+
// ));
143+
// map.put("gclosest", lookup.findStatic(Functions.class, "gclosest",
144+
// methodType(double.class, double.class, double.class, double.class, double.class,
145+
// double.class, double.class
146+
// )
147+
// ));
147148
map.put("random", lookup.findStatic(Functions.class, "random",
148149
methodType(double.class)
149150
));
@@ -263,6 +264,11 @@ public void setEnvironment(ExpressionEnvironment environment) {
263264
}
264265

265266
private static double[] getSubBuffer(Int2ObjectMap<double[]> megabuf, int key) {
267+
// avoid taking up more than 128 MiB (ignoring overhead)
268+
if (megabuf.size() > 16384) {
269+
megabuf.clear(); // make elements unreachable as soon as possible
270+
throw new ExpressionException(-1, "memory limit reached");
271+
}
266272
return megabuf.computeIfAbsent(key, k -> new double[1024]);
267273
}
268274

0 commit comments

Comments
 (0)