Limit book hover event to 32k bytes to prevent potential server crash
This commit is contained in:
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
@@ -1,6 +1,6 @@
|
||||
allprojects {
|
||||
group = 'com.ruinscraft'
|
||||
version = '1.7.6'
|
||||
version = '1.7.6-booktest'
|
||||
}
|
||||
|
||||
subprojects {
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
+6
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user