From dcc69a36b2fcb13906c464964b6e6488dd6573ca Mon Sep 17 00:00:00 2001 From: Tom <25043847+Douile@users.noreply.github.com> Date: Sun, 17 Dec 2023 00:13:08 +0000 Subject: [PATCH] minecraft: Split vanilla string by bytes instead of characters (#436) The received string length from server is expected to be a byte length whereas if we parse to string first javascript will treat our length as a character length (accounts for UTF multi-byte characters). This should hopefully fix #434 --- protocols/minecraftvanilla.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/protocols/minecraftvanilla.js b/protocols/minecraftvanilla.js index 2343fe3..3ba138d 100644 --- a/protocols/minecraftvanilla.js +++ b/protocols/minecraftvanilla.js @@ -39,7 +39,9 @@ export default class minecraftvanilla extends Core { const strLen = reader.varint() this.logger.debug('String Length: ' + strLen) - const str = reader.rest().toString('utf8') + const rest = reader.rest() + + const str = rest.toString('utf8', 0, strLen) this.logger.debug(str) const json = JSON.parse(str.substring(0, strLen)) @@ -61,8 +63,8 @@ export default class minecraftvanilla extends Core { // Better Compatibility Checker mod support let bccJson = {} - if (str.length > strLen) { - const bccStr = str.substring(strLen + 1) + if (rest.length > strLen) { + const bccStr = rest.toString('utf8', strLen + 1) bccJson = JSON.parse(bccStr) }