diff options
author | Samuel Mannehed <samuel@cendio.se> | 2019-12-23 10:25:02 +0100 |
---|---|---|
committer | Samuel Mannehed <samuel@cendio.se> | 2019-12-23 10:27:40 +0100 |
commit | 2cf82a5c8eb6afaa6934a084aa6122d35c972a80 (patch) | |
tree | f1ca9c926cca78a8c23970b4c09a6cf988f09da9 | |
parent | 06a8f7d91a1555f9309791b6cda662cbb4539aa6 (diff) | |
download | novnc-2cf82a5c8eb6afaa6934a084aa6122d35c972a80.tar.gz |
Build in the behavior to ignore decodeUTF8 errors
Makes the code clearer and more explicit in intent.
-rw-r--r-- | core/rfb.js | 12 | ||||
-rw-r--r-- | core/util/strings.js | 15 |
2 files changed, 15 insertions, 12 deletions
diff --git a/core/rfb.js b/core/rfb.js index e584960..6f717bd 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 944e81c..3dd4b29 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 |