Skip to content

Commit

Permalink
fix(tsl): ${message} not escaping properly
Browse files Browse the repository at this point in the history
  • Loading branch information
iGoodie committed Jun 19, 2020
1 parent 5494faf commit 6f8839b
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 11 deletions.
Expand Up @@ -30,11 +30,17 @@ public void queue(Runnable task) {
tasks.add(new TimerTask() {
@Override
public void run() {
long now = System.currentTimeMillis();
try {
long now = System.currentTimeMillis();

task.run();

task.run();
frozenUntil = now + cooldown;

frozenUntil = now + cooldown;
} catch(Throwable e) {
discardedEvents++;
// TODO: "Event failed HUD"
}
}
});
updateTimer();
Expand All @@ -49,16 +55,22 @@ public void queue(TSLEvent eventNode, EventArguments args, CooldownBucket cooldo
@Override
public void run() {
TwitchSpawn.SERVER.execute(() -> {
long now = System.currentTimeMillis();
boolean performed = eventNode.process(args);
try {
long now = System.currentTimeMillis();
boolean performed = eventNode.process(args);

if (!performed) {
if (!performed) {
discardedEvents++;
return;
}

frozenUntil = now + cooldown;
succeededEvents++;

} catch (Throwable e) {
discardedEvents++;
return;
// TODO: "Event failed HUD"
}

frozenUntil = now + cooldown;
succeededEvents++;
});
}
});
Expand Down Expand Up @@ -112,6 +124,7 @@ public boolean proceed() {
public void reset() {
timer.cancel();
timer.purge();
timer = new Timer();
timerTicking = false;
tasks.clear();
this.frozenUntil = -1;
Expand Down
Expand Up @@ -42,7 +42,7 @@ public static String fromArgs(String expression, EventArguments args) {
return args.eventName;

if (expression.equals("message"))
return args.message;
return JSONUtils.escape(args.message);

if (expression.equals("title"))
return args.rewardTitle;
Expand Down
Expand Up @@ -46,4 +46,28 @@ public static void forEach(JSONArray array, Consumer<JSONObject> consumer) {
}
}

public static String escape(String jsonString) {
StringBuilder escapedString = new StringBuilder();

boolean isEscaping = false;

for (char character : jsonString.toCharArray()) {
if (character == '\\' && !isEscaping) {
isEscaping = true;
escapedString.append(character);
continue;
}

if (character == '\'' || character == '\"' || character == '\\') {
if (!isEscaping)
escapedString.append("\\");
}

escapedString.append(character);
isEscaping = false;
}

return escapedString.toString();
}

}
15 changes: 15 additions & 0 deletions src/test/java/net/programmer/igoodie/twitchspawn/UtilsTests.java
@@ -1,7 +1,10 @@
package net.programmer.igoodie.twitchspawn;

import net.programmer.igoodie.twitchspawn.tslanguage.parser.TSLParser;
import net.programmer.igoodie.twitchspawn.util.JSONUtils;
import net.programmer.igoodie.twitchspawn.util.PercentageRandomizer;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -80,4 +83,16 @@ public void pencentageBelow100Test() {
});
}

@Test
@DisplayName("should escape JSON strings successfully.")
public void jsonStringEscapistTest() throws JSONException {
String original = "!drop \"\"\"\"\"\"''''\\\\\\\\'\\\\\\\"\\";
String escaped = JSONUtils.escape(original);

String jsonString = String.format("{text:\'%s\'}", escaped);

JSONObject json = new JSONObject(jsonString);
System.out.println("Parsed: " + json);
}

}

0 comments on commit 6f8839b

Please sign in to comment.