From 017b89f97f894747d82c4a282811218db4e8902c Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 29 Dec 2017 14:35:26 -0500 Subject: [PATCH] Characters can be escaped in string literals --- Server/pom.xml | 5 +++++ .../java/net/simon987/server/assembly/Assembler.java | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Server/pom.xml b/Server/pom.xml index df94ffc..473197b 100644 --- a/Server/pom.xml +++ b/Server/pom.xml @@ -104,6 +104,11 @@ json-simple 1.1.1 + + org.apache.commons + commons-text + 1.2 + diff --git a/Server/src/main/java/net/simon987/server/assembly/Assembler.java b/Server/src/main/java/net/simon987/server/assembly/Assembler.java index 071804e..ca3b02c 100755 --- a/Server/src/main/java/net/simon987/server/assembly/Assembler.java +++ b/Server/src/main/java/net/simon987/server/assembly/Assembler.java @@ -3,6 +3,7 @@ package net.simon987.server.assembly; import net.simon987.server.ServerConfiguration; import net.simon987.server.assembly.exception.*; import net.simon987.server.logging.LogManager; +import org.apache.commons.text.StringEscapeUtils; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -135,7 +136,6 @@ public class Assembler { try { - //Special thanks to https://stackoverflow.com/questions/1757065/ String[] values = line.substring(2, line.length()).split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1); @@ -150,7 +150,12 @@ public class Assembler { out.write(parseDUPOperator16(valueTokens, labels, currentLine)); } else if (value.startsWith("\"") && value.endsWith("\"")) { //Handle string - out.write(value.substring(1, value.length() - 1).getBytes(StandardCharsets.UTF_16)); + + //Unescape the string + String string = value.substring(1, value.length() - 1); + string = StringEscapeUtils.unescapeJava(string); + + out.write(string.getBytes(StandardCharsets.UTF_16)); } else if (labels != null && labels.containsKey(value)) { //Handle label out.writeChar(labels.get(value));