Skip to content

Commit cde738a

Browse files
fix: handle square bracket HTML entities in Gemini responses (#7577)
Co-authored-by: Roo Code <[email protected]>
1 parent 6fe9071 commit cde738a

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/utils/__tests__/text-normalization.spec.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,30 @@ describe("Text normalization utilities", () => {
7575
expect(unescapeHtmlEntities("")).toBe("")
7676
expect(unescapeHtmlEntities(undefined as unknown as string)).toBe(undefined)
7777
})
78+
79+
it("unescapes square bracket entities (numeric)", () => {
80+
expect(unescapeHtmlEntities("string&#91;&#93;")).toBe("string[]")
81+
expect(unescapeHtmlEntities("array&#91;0&#93;")).toBe("array[0]")
82+
expect(unescapeHtmlEntities("matrix&#91;i&#93;&#91;j&#93;")).toBe("matrix[i][j]")
83+
})
84+
85+
it("unescapes square bracket entities (named)", () => {
86+
expect(unescapeHtmlEntities("string&lsqb;&rsqb;")).toBe("string[]")
87+
expect(unescapeHtmlEntities("array&lsqb;0&rsqb;")).toBe("array[0]")
88+
expect(unescapeHtmlEntities("matrix&lsqb;i&rsqb;&lsqb;j&rsqb;")).toBe("matrix[i][j]")
89+
})
90+
91+
it("handles C# array syntax with escaped square brackets", () => {
92+
// Test case based on the reported issue
93+
const input = "string&#91;&#93; myArray = new string&#91;5&#93;;\nmyArray&#91;2&#93; = &quot;hello&quot;;"
94+
const expected = 'string[] myArray = new string[5];\nmyArray[2] = "hello";'
95+
expect(unescapeHtmlEntities(input)).toBe(expected)
96+
})
97+
98+
it("handles mixed square bracket entities", () => {
99+
const input = "array&#91;0&rsqb; and &lsqb;1&#93;"
100+
const expected = "array[0] and [1]"
101+
expect(unescapeHtmlEntities(input)).toBe(expected)
102+
})
78103
})
79104
})

src/utils/text-normalization.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,5 +91,9 @@ export function unescapeHtmlEntities(text: string): string {
9191
.replace(/&quot;/g, '"')
9292
.replace(/&#39;/g, "'")
9393
.replace(/&apos;/g, "'")
94+
.replace(/&#91;/g, "[")
95+
.replace(/&#93;/g, "]")
96+
.replace(/&lsqb;/g, "[")
97+
.replace(/&rsqb;/g, "]")
9498
.replace(/&amp;/g, "&")
9599
}

0 commit comments

Comments
 (0)