diff --git a/src/backend/mi_parse.ts b/src/backend/mi_parse.ts index cee3b0a..b306252 100644 --- a/src/backend/mi_parse.ts +++ b/src/backend/mi_parse.ts @@ -136,7 +136,13 @@ export function parseMI(output: string): MINode { stringEnd++; } // hax - let str = JSON.parse(output.substr(0, stringEnd)); + let str; + try { + str = JSON.parse(output.substr(0, stringEnd)); + } + catch (e) { + str = output.substr(0, stringEnd); + } output = output.substr(stringEnd); return str; }; diff --git a/test/mi_parse.test.ts b/test/mi_parse.test.ts index dd75df7..c37f618 100644 --- a/test/mi_parse.test.ts +++ b/test/mi_parse.test.ts @@ -23,6 +23,18 @@ suite("MI Parse", () => { assert.equal(parsed.outOfBandRecord[0].content, "[Thread 0x7fffe993a700 (LWP 11002) exited]\n"); assert.equal(parsed.resultRecords, undefined); }); + test("Unicode", () => { + let parsed = parseMI(`~"[Depuraci\\303\\263n de hilo usando libthread_db enabled]\\n"`); + assert.ok(parsed); + assert.equal(parsed.token, undefined); + assert.equal(parsed.outOfBandRecord.length, 1); + assert.equal(parsed.outOfBandRecord[0].isStream, true); + // Hack + assert.equal(parsed.outOfBandRecord[0].content, `"[Depuraci\\303\\263n de hilo usando libthread_db enabled]\\n"`); + // Better Goal: + //assert.equal(parsed.outOfBandRecord[0].content, "[Depuración de hilo usando libthread_db enabled]\n"); + assert.equal(parsed.resultRecords, undefined); + }); test("Empty line", () => { let parsed = parseMI(``); assert.ok(parsed);