Skip to content

Commit

Permalink
Copy the SimpleLiteral backing data instead of exposing it. (#6683)
Browse files Browse the repository at this point in the history
Use copy array whenever data could be modified.
  • Loading branch information
Moderocky committed May 10, 2024
1 parent e0aed72 commit d649c83
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/main/java/ch/njol/skript/lang/util/SimpleLiteral.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.skriptlang.skript.lang.converter.Converters;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
* Represents a literal, i.e. a static value like a number or a string.
Expand Down Expand Up @@ -95,24 +96,28 @@ public boolean init() {
return true;
}

private T[] data() {
return Arrays.copyOf(data, data.length);
}

@Override
public T[] getArray() {
return data;
return this.data();
}

@Override
public T[] getArray(Event event) {
return data;
return this.data();
}

@Override
public T[] getAll() {
return data;
return this.data();
}

@Override
public T[] getAll(Event event) {
return data;
return this.data();
}

@Override
Expand All @@ -136,7 +141,7 @@ public Class<T> getReturnType() {
public <R> Literal<? extends R> getConvertedExpression(Class<R>... to) {
if (CollectionUtils.containsSuperclass(to, type))
return (Literal<? extends R>) this;
R[] parsedData = Converters.convert(data, to, (Class<R>) Utils.getSuperType(to));
R[] parsedData = Converters.convert(this.data(), to, (Class<R>) Utils.getSuperType(to));
if (parsedData.length != data.length)
return null;
return new ConvertedLiteral<>(this, parsedData, (Class<R>) Utils.getSuperType(to));
Expand Down

0 comments on commit d649c83

Please sign in to comment.