From 2f14ee304b017468cf015b703afc04119a1280b9 Mon Sep 17 00:00:00 2001 From: ZhouYongyou <128128010+zhouyongyou@users.noreply.github.com> Date: Wed, 5 Nov 2025 01:05:13 +0800 Subject: [PATCH] =?UTF-8?q?fix(decision):=20correct=20Unicode=20regex=20es?= =?UTF-8?q?caping=20in=20reInvisibleRunes=20##=20Critical=20Fix=20###=20Pr?= =?UTF-8?q?oblem=20-=20=E2=9D=8C=20`regexp.MustCompile(`[\u200B...]`)`=20(?= =?UTF-8?q?backticks=20=3D=20raw=20string)=20-=20Raw=20strings=20don't=20p?= =?UTF-8?q?arse=20\uXXXX=20escape=20sequences=20in=20Go=20-=20Regex=20was?= =?UTF-8?q?=20matching=20literal=20text=20"\u200B"=20instead=20of=20Unicod?= =?UTF-8?q?e=20characters=20###=20Solution=20-=20=E2=9C=85=20`regexp.MustC?= =?UTF-8?q?ompile("[\u200B...]")`=20(double=20quotes=20=3D=20parsed=20stri?= =?UTF-8?q?ng)=20-=20Double=20quotes=20properly=20parse=20Unicode=20escape?= =?UTF-8?q?=20sequences=20-=20Now=20correctly=20matches=20U+200B=20(zero-w?= =?UTF-8?q?idth=20space),=20U+200C,=20U+200D,=20U+FEFF=20##=20Impact=20-?= =?UTF-8?q?=20Zero-width=20characters=20are=20now=20properly=20removed=20b?= =?UTF-8?q?efore=20JSON=20parsing=20-=20Prevents=20invisible=20character?= =?UTF-8?q?=20corruption=20in=20AI=20responses=20-=20Fixes=20potential=20J?= =?UTF-8?q?SON=20parsing=20failures=20##=20Related=20-=20Same=20fix=20appl?= =?UTF-8?q?ied=20to=20z-dev=20in=20commit=20db7c035?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- decision/engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decision/engine.go b/decision/engine.go index 7008548e..bcfdbc7c 100644 --- a/decision/engine.go +++ b/decision/engine.go @@ -20,7 +20,7 @@ var ( reJSONArray = regexp.MustCompile(`(?is)\[\s*\{.*?\}\s*\]`) reArrayHead = regexp.MustCompile(`^\[\s*\{`) reArrayOpenSpace = regexp.MustCompile(`^\[\s+\{`) - reInvisibleRunes = regexp.MustCompile(`[\u200B\u200C\u200D\uFEFF]`) + reInvisibleRunes = regexp.MustCompile("[\u200B\u200C\u200D\uFEFF]") ) // PositionInfo 持仓信息