From f559f5ca70de1658bbf69fb78c31cace215e532c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 11 Feb 2022 16:33:02 -0800 Subject: [PATCH] GUACAMOLE-896: Add JavaScript UTF-8 parser implementation. --- .../src/main/webapp/modules/StringReader.js | 101 ++------------ .../src/main/webapp/modules/UTF8Parser.js | 126 ++++++++++++++++++ 2 files changed, 134 insertions(+), 93 deletions(-) create mode 100644 guacamole-common-js/src/main/webapp/modules/UTF8Parser.js diff --git a/guacamole-common-js/src/main/webapp/modules/StringReader.js b/guacamole-common-js/src/main/webapp/modules/StringReader.js index 247b8b9a2..37b555c06 100644 --- a/guacamole-common-js/src/main/webapp/modules/StringReader.js +++ b/guacamole-common-js/src/main/webapp/modules/StringReader.js @@ -38,6 +38,13 @@ Guacamole.StringReader = function(stream) { */ var guac_reader = this; + /** + * Parser for received UTF-8 data. + * + * @type {!Guacamole.UTF8Parser} + */ + var utf8Parser = new Guacamole.UTF8Parser(); + /** * Wrapped Guacamole.ArrayBufferReader. * @@ -46,103 +53,11 @@ Guacamole.StringReader = function(stream) { */ var array_reader = new Guacamole.ArrayBufferReader(stream); - /** - * The number of bytes remaining for the current codepoint. - * - * @private - * @type {!number} - */ - var bytes_remaining = 0; - - /** - * The current codepoint value, as calculated from bytes read so far. - * - * @private - * @type {!number} - */ - var codepoint = 0; - - /** - * Decodes the given UTF-8 data into a Unicode string. The data may end in - * the middle of a multibyte character. - * - * @private - * @param {!ArrayBuffer} buffer - * Arbitrary UTF-8 data. - * - * @return {!string} - * A decoded Unicode string. - */ - function __decode_utf8(buffer) { - - var text = ""; - - var bytes = new Uint8Array(buffer); - for (var i=0; i