fix regex overflow

This commit is contained in:
sirjonasxx 2020-06-03 21:08:29 +02:00
parent a56b98696f
commit 64c6f35b2f
2 changed files with 33 additions and 7 deletions

View File

@ -51,11 +51,29 @@ public class PacketStringUtils {
packet = replaceAll(packet, "\\{b:([0-9]{1,3})}",
m -> "[" + Integer.parseInt(m.group(1)) + "]");
packet = replaceAll(packet, "\\{s:\"(([^\"]|(\\\\\"))*)\"}",
m -> {
String match = m.group(1).replace("\\\"", "\"");
return toString(new HPacket(0, match).readBytes(match.length() + 2, 6));
});
// results in regex stackoverflow for long strings
// packet = replaceAll(packet, "\\{s:\"(([^\"]|(\\\\\"))*)\"}",
// m -> {
// String match = m.group(1).replace("\\\"", "\"");
// return toString(new HPacket(0, match).readBytes(match.length() + 2, 6));
// });
while (packet.contains("{s:\"")) {
int start = packet.indexOf("{s:\"");
int end = packet.indexOf("\"}");
while (end != -1 && packet.charAt(end - 1) == '\\') {
end = packet.indexOf("\"}", end + 1);
}
if (end == -1) {
throw new InvalidPacketException();
}
String match = packet.substring(start + 4, end).replace("\\\"", "\"");;
packet = packet.substring(0, start) +
toString(new HPacket(0, match).readBytes(match.length() + 2, 6)) +
packet.substring(end + 2);
}
if (packet.contains("{") || packet.contains("}")) {
throw new InvalidPacketException();

View File

@ -27,7 +27,7 @@ public class InjectionController extends SubForm {
inputPacket.textProperty().addListener(event -> Platform.runLater(this::updateUI));
}
private boolean isPacketIncomplete(String line) {
private static boolean isPacketIncomplete(String line) {
boolean unmatchedBrace = false;
boolean ignoreBrace = false;
@ -51,7 +51,7 @@ public class InjectionController extends SubForm {
return unmatchedBrace;
}
private HPacket[] parsePackets(String fullText) {
private static HPacket[] parsePackets(String fullText) {
LinkedList<HPacket> packets = new LinkedList<>();
String[] lines = fullText.split("\n");
@ -133,4 +133,12 @@ public class InjectionController extends SubForm {
writeToLog(Color.RED, "CS -> packet with id: " + packet.headerId());
}
}
public static void main(String[] args) {
HPacket[] packets = parsePackets("{l}{u:3}{i:967585}{i:9589}{s:\"furni_inscriptionfuckfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionfurni_inscriptionsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\"}{s:\"sirjonasxx-II\"}{s:\"\"}{i:188}{i:0}{i:0}{b:false}");
System.out.println(new HPacket("{l}{u:2550}{s:\"ClientPerf\"\"ormance\\\"}\"}{s:\"23\"}{s:\"fps\"}{s:\"Avatars: 1, Objects: 0\"}{i:76970180}").toExpression());
System.out.println("hi");
}
}