From 2cf82a5c8eb6afaa6934a084aa6122d35c972a80 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. --- core/rfb.js | 12 ++---------- core/util/strings.js | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/core/rfb.js b/core/rfb.js index e5849605..6f717bd5 100644 --- a/core/rfb.js +++ b/core/rfb.js @@ -1180,11 +1180,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; } @@ -1721,11 +1717,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/core/util/strings.js b/core/util/strings.js index 944e81c8..3dd4b29f 100644 --- a/core/util/strings.js +++ b/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