about summary refs log tree commit diff
path: root/src/librustdoc
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume.gomez@huawei.com>2022-03-23 17:26:32 +0100
committerGuillaume Gomez <guillaume.gomez@huawei.com>2022-04-18 20:59:09 +0200
commit8e29ed43d9943b2cf705e3511e54ba01d2feaa93 (patch)
tree3aa1edd8d84885ed20d6e8c98652de8c2bde6f26 /src/librustdoc
parentf9251eef688590cd4770baaa01241bbb060c2eba (diff)
downloadrust-8e29ed43d9943b2cf705e3511e54ba01d2feaa93.tar.gz
rust-8e29ed43d9943b2cf705e3511e54ba01d2feaa93.zip
Add isIdentCharacter function to ensure that unexpected characters are handled correctly
Diffstat (limited to 'src/librustdoc')
-rw-r--r--src/librustdoc/html/static/js/search.js39
1 files changed, 29 insertions, 10 deletions
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
@@ -212,6 +212,21 @@ window.initSearch = function(rawSearchIndex) {
     }
 
     /**
+     * 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
      * @param {string} name                  - Name of the query element.
@@ -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;