From 3813df0600c9c7ad35734a246674f2e6de911475 Mon Sep 17 00:00:00 2001 From: Francesco Stasi Date: Thu, 16 Dec 2021 16:14:41 +0100 Subject: [PATCH 1/2] correctly transform uint8array to string --- .../src/browser/create/create-api.ts | 47 +++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/arduino-ide-extension/src/browser/create/create-api.ts b/arduino-ide-extension/src/browser/create/create-api.ts index 55a5d6387..9d745490c 100644 --- a/arduino-ide-extension/src/browser/create/create-api.ts +++ b/arduino-ide-extension/src/browser/create/create-api.ts @@ -15,6 +15,47 @@ export namespace ResponseResultProvider { export const JSON: ResponseResultProvider = (response) => response.json(); } +function Utf8ArrayToStr(array: Uint8Array): string { + let out, i, c; + let char2, char3; + + out = ''; + const len = array.length; + i = 0; + while (i < len) { + c = array[i++]; + switch (c >> 4) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + // 0xxxxxxx + out += String.fromCharCode(c); + break; + case 12: + case 13: + // 110x xxxx 10xx xxxx + char2 = array[i++]; + out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f)); + break; + case 14: + // 1110 xxxx 10xx xxxx 10xx xxxx + char2 = array[i++]; + char3 = array[i++]; + out += String.fromCharCode( + ((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0) + ); + break; + } + } + + return out; +} + type ResourceType = 'f' | 'd'; @injectable() @@ -275,9 +316,7 @@ export class CreateApi { // parse the secret file const secrets = ( - typeof content === 'string' - ? content - : new TextDecoder().decode(content) + typeof content === 'string' ? content : Utf8ArrayToStr(content) ) .split(/\r?\n/) .reduce((prev, curr) => { @@ -341,7 +380,7 @@ export class CreateApi { const headers = await this.headers(); let data: string = - typeof content === 'string' ? content : new TextDecoder().decode(content); + typeof content === 'string' ? content : Utf8ArrayToStr(content); data = await this.toggleSecretsInclude(posixPath, data, 'remove'); const payload = { data: btoa(data) }; From 5f94619803de91834822db729ce896e17a342a68 Mon Sep 17 00:00:00 2001 From: Francesco Stasi Date: Fri, 17 Dec 2021 10:26:08 +0100 Subject: [PATCH 2/2] export function --- arduino-ide-extension/src/browser/create/create-api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arduino-ide-extension/src/browser/create/create-api.ts b/arduino-ide-extension/src/browser/create/create-api.ts index 9d745490c..8c2e4281a 100644 --- a/arduino-ide-extension/src/browser/create/create-api.ts +++ b/arduino-ide-extension/src/browser/create/create-api.ts @@ -15,7 +15,7 @@ export namespace ResponseResultProvider { export const JSON: ResponseResultProvider = (response) => response.json(); } -function Utf8ArrayToStr(array: Uint8Array): string { +export function Utf8ArrayToStr(array: Uint8Array): string { let out, i, c; let char2, char3;