From 8e29ed43d9943b2cf705e3511e54ba01d2feaa93 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Wed, 23 Mar 2022 17:26:32 +0100 Subject: Add isIdentCharacter function to ensure that unexpected characters are handled correctly --- src/librustdoc/html/static/js/search.js | 39 ++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-) (limited to 'src/librustdoc/html/static') diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js index 421e8f31e97..8beb0768dcf 100644 --- a/src/librustdoc/html/static/js/search.js +++ b/src/librustdoc/html/static/js/search.js @@ -211,6 +211,21 @@ window.initSearch = function(rawSearchIndex) { return parserState.userQuery.slice(parserState.pos, parserState.pos + 2) == '->'; } + /** + * Returns `true` if the given `c` character is valid for an ident. + * + * @param {string} c + * + * @return {boolean} + */ + function isIdentCharacter(c) { + return ( + c === '_' || + (c >= '0' && c <= '9') || + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z')); + } + /** * @param {ParsedQuery} query * @param {ParserState} parserState @@ -274,18 +289,22 @@ window.initSearch = function(rawSearchIndex) { } else { while (parserState.pos < parserState.length) { var c = parserState.userQuery[parserState.pos]; - if (isErrorCharacter(c)) { - throw new Error(`Unexpected \`${c}\``); - } else if (isStopCharacter(c) || isSpecialStartCharacter(c)) { - break; - } - // If we allow paths ("str::string" for example). - else if (c === ":") { - if (!isPathStart(parserState)) { + if (!isIdentCharacter(c)) { + if (isErrorCharacter(c)) { + throw new Error(`Unexpected \`${c}\``); + } else if (isStopCharacter(c) || isSpecialStartCharacter(c)) { break; } - // Skip current ":". - parserState.pos += 1; + // If we allow paths ("str::string" for example). + else if (c === ":") { + if (!isPathStart(parserState)) { + break; + } + // Skip current ":". + parserState.pos += 1; + } else { + throw new Error(`Unexpected \`${c}\``); + } } parserState.pos += 1; end = parserState.pos; -- cgit 1.4.1-3-g733a5