From ce94d92e1848e4d13db67a6bb8901004f124ca9f Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Mon, 23 Dec 2019 10:25:02 +0100 Subject: [PATCH] Build in the behavior to ignore decodeUTF8 errors Makes the code clearer and more explicit in intent. --- kasmweb/core/rfb.js | 12 ++---------- kasmweb/core/util/strings.js | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/kasmweb/core/rfb.js b/kasmweb/core/rfb.js index 071f158..9254fc8 100644 --- a/kasmweb/core/rfb.js +++ b/kasmweb/core/rfb.js @@ -1288,11 +1288,7 @@ export default class RFB extends EventTargetMixin { const name_length = this._sock.rQshift32(); if (this._sock.rQwait('server init name', name_length, 24)) { return false; } let name = this._sock.rQshiftStr(name_length); - try { - name = decodeUTF8(name); - } catch (e) { - // bypass no-empty - } + name = decodeUTF8(name, true); if (this._rfb_tightvnc) { if (this._sock.rQwait('TightVNC extended server init header', 8, 24 + name_length)) { return false; } @@ -1912,11 +1908,7 @@ export default class RFB extends EventTargetMixin { } let name = this._sock.rQshiftStr(length); - try { - name = decodeUTF8(name); - } catch (e) { - // bypass no-empty - } + name = decodeUTF8(name, true); this._setDesktopName(name); diff --git a/kasmweb/core/util/strings.js b/kasmweb/core/util/strings.js index 944e81c..3dd4b29 100644 --- a/kasmweb/core/util/strings.js +++ b/kasmweb/core/util/strings.js @@ -7,8 +7,19 @@ */ // Decode from UTF-8 -export function decodeUTF8(utf8string) { - return decodeURIComponent(escape(utf8string)); +export function decodeUTF8(utf8string, allowLatin1=false) { + try { + return decodeURIComponent(escape(utf8string)); + } catch (e) { + if (e instanceof URIError) { + if (allowLatin1) { + // If we allow Latin1 we can ignore any decoding fails + // and in these cases return the original string + return utf8string; + } + } + throw e; + } } // Encode to UTF-8