Limit book hover event to 32k bytes to prevent potential server crash

This commit is contained in:
ds58 committed 2023-05-29 14:23:51 -05:00
1 parent 2c2a8d962f
commit 56043f404b
14 files changed
+92 -4

No files matched your search

@@ -6,6 +6,8 @@ public interface INbtTagList {
String getString(int index);
boolean isCompound(int index);
int size();
}
@@ -43,8 +43,28 @@ public class NbtCheck_pages extends NbtCheck {
// iterate through book pages
for (int i = 0; i < pages.size(); i++) {
final String page = pages.getString(i);
final String pageNoSpaces = page.replace(" ", "");
final String pageContent;
if (pages.isCompound(i)) {
INbtTagCompound page = pages.getCompound(i);
if (page.hasKey("text")) {
pageContent = page.getString("text");
} else {
pageContent = "";
}
if (page.hasKey("hoverEvent")) {
INbtTagCompound hoverEvent = page.getCompound("hoverEvent");
if (hoverEvent.getStringSizeBytes() > 32000) {
return NbtCheckResult.CRITICAL;
}
}
} else {
pageContent = pages.getString(i);
}
final String pageNoSpaces = pageContent.replace(" ", "");
// check char map
short[] charMap = createCharMap(pageNoSpaces);
@@ -65,7 +85,7 @@ public class NbtCheck_pages extends NbtCheck {
for (String crashTranslation : MOJANG_CRASH_TRANSLATIONS) {
String translationJson = String.format("{\"translate\":\"%s\"}", crashTranslation);
if (page.equals(translationJson)) {
if (pageContent.equals(translationJson)) {
return NbtCheckResult.CRITICAL;
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
allprojects {
group = 'com.ruinscraft'
version = '1.7.6'
version = '1.7.6-booktest'
}
subprojects {
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_12_R1.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.server.v1_12_R1.NBTTagCompound;
import net.minecraft.server.v1_12_R1.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.i(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_13_R2.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.server.v1_13_R2.NBTTagCompound;
import net.minecraft.server.v1_13_R2.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.c(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_14_R1.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.server.v1_14_R1.NBTTagCompound;
import net.minecraft.server.v1_14_R1.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.get(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_15_R1.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.server.v1_15_R1.NBTTagCompound;
import net.minecraft.server.v1_15_R1.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.get(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_16_R1.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.server.v1_16_R1.NBTTagCompound;
import net.minecraft.server.v1_16_R1.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.get(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_16_R2.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.server.v1_16_R2.NBTTagCompound;
import net.minecraft.server.v1_16_R2.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.get(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_16_R3.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.server.v1_16_R3.NBTTagCompound;
import net.minecraft.server.v1_16_R3.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.get(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_17_R1.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.get(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_18_R1.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.j(index);
}
@Override
public boolean isCompound(int index) {
return handle.get(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_18_R2.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.j(index);
}
@Override
public boolean isCompound(int index) {
return handle.get(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();
@@ -2,6 +2,7 @@ package com.ruinscraft.panilla.craftbukkit.v1_8_R3.nbt;
import com.ruinscraft.panilla.api.nbt.INbtTagCompound;
import com.ruinscraft.panilla.api.nbt.INbtTagList;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
import net.minecraft.server.v1_8_R3.NBTTagList;
public class NbtTagList implements INbtTagList {
@@ -22,6 +23,11 @@ public class NbtTagList implements INbtTagList {
return handle.getString(index);
}
@Override
public boolean isCompound(int index) {
return handle.g(index) instanceof NBTTagCompound;
}
@Override
public int size() {
return handle.size();