From 22ce1cdd1ceeb4d4a956de1a881f0d3103907e44 Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Wed, 7 Aug 2024 13:04:50 -0700 Subject: [PATCH] ICU4J: Fix bug with '||' in a reserved statement being misparsed --- .../core/src/main/java/com/ibm/icu/message2/MFParser.java | 4 +++- testdata/message2/reserved-syntax-2.json | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/icu4j/main/core/src/main/java/com/ibm/icu/message2/MFParser.java b/icu4j/main/core/src/main/java/com/ibm/icu/message2/MFParser.java index 65e7d3e3e9b9..94470b9271ce 100644 --- a/icu4j/main/core/src/main/java/com/ibm/icu/message2/MFParser.java +++ b/icu4j/main/core/src/main/java/com/ibm/icu/message2/MFParser.java @@ -369,8 +369,10 @@ private String getReservedBody() throws MFParseException { result.append(firstPart); while (true) { int spaceCount = skipWhitespaces(); + int beforeNextPart = input.getPosition(); String nextPart = getReservedBodyPart(); - if (nextPart.length() == 0) { + // If we didn't parse anything, restore the whitespace + if (input.getPosition() <= beforeNextPart) { input.backup(spaceCount); break; } diff --git a/testdata/message2/reserved-syntax-2.json b/testdata/message2/reserved-syntax-2.json index 23e115f8206b..e8ef9a782a69 100644 --- a/testdata/message2/reserved-syntax-2.json +++ b/testdata/message2/reserved-syntax-2.json @@ -8,7 +8,8 @@ { "src" : "\\\\{ ? 󗟋 𫓜|@} |}", "ignoreCpp": "This would be an error in ICU4C" }, { "src" : "\\\\{ ? 󗟋 𫓜|@} | \\} @𠟅򑚎𥪙𽧫=|| @򒘒򳷦㥞򉊷=$򸚶񽱆񅗽񤕞 @𰺱:񎫛񢶛򶈎񄮒}", "ignoreCpp": "This would be an error in ICU4C" }, { "src" : "{ $iFN ^ @USh =$u @l}", "ignoreCpp": "This would be an error in ICU4C" }, - { "src" : ".local $dS ={ $p4 ^ |.| \\\\ @g:FV = $kd}{{@}}", "ignoreCpp": "This would be an error in ICU4C" } + { "src" : ".local $dS ={ $p4 ^ |.| \\\\ @g:FV = $kd}{{@}}", "ignoreCpp": "This would be an error in ICU4C" }, + { "src" : ".D. \\\\ ||{1}{{}} ", "ignoreCpp": "This would be an error in ICU4C" } ] }