summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mannehed <samuel@cendio.se>2019-12-23 10:25:02 +0100
committerSamuel Mannehed <samuel@cendio.se>2019-12-23 10:27:40 +0100
commit2cf82a5c8eb6afaa6934a084aa6122d35c972a80 (patch)
treef1ca9c926cca78a8c23970b4c09a6cf988f09da9
parent06a8f7d91a1555f9309791b6cda662cbb4539aa6 (diff)
downloadnovnc-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.js12
-rw-r--r--core/util/strings.js15
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