From 67b30c5ed52d5cb8f6787d9e5b764e74b516e5d7 Mon Sep 17 00:00:00 2001 From: Joseph Burton Date: Fri, 10 May 2024 00:31:58 -0700 Subject: [PATCH] Fix DataConverter ConverterParticleToNBT.parseProperties - The old code was using `StringReader.peek()` in a place where it meant to be `StringReader.skip()`. - The vanilla code allows a trailing comma, but only if there is no whitespace between it and the closing bracket, which is a bit weird. I think that's a bug and it shouldn't allow trailing commas, but if you disagree then only the first issue needs to be fixed. --- .../server/Rewrite-dataconverter-system.patch | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/patches/server/Rewrite-dataconverter-system.patch b/patches/server/Rewrite-dataconverter-system.patch index 3d14211516..290f320298 100644 --- a/patches/server/Rewrite-dataconverter-system.patch +++ b/patches/server/Rewrite-dataconverter-system.patch @@ -7970,27 +7970,29 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + reader.expect('['); + reader.skipWhitespace(); + -+ while (reader.canRead() && reader.peek() != ']') { -+ reader.skipWhitespace(); -+ -+ final String property = reader.readString(); -+ -+ reader.skipWhitespace(); -+ reader.expect('='); -+ reader.skipWhitespace(); -+ -+ final String value = reader.readString(); -+ ret.setString(property, value); -+ -+ reader.skipWhitespace(); -+ if (reader.canRead()) { -+ if (reader.peek() != ',') { -+ // invalid character or ']' -+ break; ++ if (reader.canRead() && reader.peek() != ']') { ++ while (reader.canRead()) { ++ final String property = reader.readString(); ++ ++ reader.skipWhitespace(); ++ reader.expect('='); ++ reader.skipWhitespace(); ++ ++ final String value = reader.readString(); ++ ret.setString(property, value); ++ ++ reader.skipWhitespace(); ++ if (reader.canRead()) { ++ if (reader.peek() != ',') { ++ // invalid character or ']' ++ break; ++ } ++ ++ // skip ',' and move onto next entry ++ reader.skip(); + } -+ -+ // skip ',' and move onto next entry -+ reader.peek(); ++ ++ reader.skipWhitespace(); + } + } +