about summary refs log tree commit diff
path: root/src/librustdoc/html/static
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2023-11-17 15:44:29 -0700
committerMichael Howell <michael@notriddle.com>2023-11-17 18:22:31 -0700
commita66972d5516c9d2e6e1fb99c263ca2aa2fc67b9e (patch)
tree5b6e472ba0ee9bba482c267ea8743835305fce37 /src/librustdoc/html/static
parentc76c2e71f01a61a9b11001b0dc3fe837975f41c0 (diff)
downloadrust-a66972d5516c9d2e6e1fb99c263ca2aa2fc67b9e.tar.gz
rust-a66972d5516c9d2e6e1fb99c263ca2aa2fc67b9e.zip
rustdoc-search: fix accidental shared, mutable map
Diffstat (limited to 'src/librustdoc/html/static')
-rw-r--r--src/librustdoc/html/static/js/search.js44
1 files changed, 14 insertions, 30 deletions
diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js
index 38391436aea..a2aa50194e4 100644
--- a/src/librustdoc/html/static/js/search.js
+++ b/src/librustdoc/html/static/js/search.js
@@ -1349,24 +1349,16 @@ function initSearch(rawSearchIndex) {
                         continue;
                     }
                     if (fnType.id < 0 && queryElem.id < 0) {
-                        if (mgens === null) {
-                            mgens = new Map();
+                        if (mgens && mgens.has(fnType.id) &&
+                            mgens.get(fnType.id) !== queryElem.id) {
+                            continue;
                         }
-                        const alreadyAssigned = mgens.has(fnType.id);
-                        if (alreadyAssigned) {
-                            if (mgens.get(fnType.id) !== queryElem.id) {
-                                continue;
-                            }
-                        } else {
-                            mgens.set(fnType.id, queryElem.id);
-                        }
-                        if (!solutionCb || solutionCb(mgens)) {
+                        const mgensScratch = new Map(mgens);
+                        mgensScratch.set(fnType.id, queryElem.id);
+                        if (!solutionCb || solutionCb(mgensScratch)) {
                             return true;
                         }
-                        if (!alreadyAssigned) {
-                            mgens.delete(fnType.id);
-                        }
-                    } else if (!solutionCb || solutionCb(mgens)) {
+                    } else if (!solutionCb || solutionCb(mgens ? new Map(mgens) : null)) {
                         // unifyFunctionTypeIsMatchCandidate already checks that ids match
                         return true;
                     }
@@ -1376,34 +1368,26 @@ function initSearch(rawSearchIndex) {
                         continue;
                     }
                     if (fnType.id < 0) {
-                        if (mgens === null) {
-                            mgens = new Map();
-                        }
-                        const alreadyAssigned = mgens.has(fnType.id);
-                        if (alreadyAssigned) {
-                            if (mgens.get(fnType.id) !== 0) {
-                                continue;
-                            }
-                        } else {
-                            mgens.set(fnType.id, 0);
+                        if (mgens && mgens.has(fnType.id) &&
+                            mgens.get(fnType.id) !== 0) {
+                            continue;
                         }
+                        const mgensScratch = new Map(mgens);
+                        mgensScratch.set(fnType.id, 0);
                         if (unifyFunctionTypes(
                             whereClause[(-fnType.id) - 1],
                             queryElems,
                             whereClause,
-                            mgens,
+                            mgensScratch,
                             solutionCb
                         )) {
                             return true;
                         }
-                        if (!alreadyAssigned) {
-                            mgens.delete(fnType.id);
-                        }
                     } else if (unifyFunctionTypes(
                         fnType.generics,
                         queryElems,
                         whereClause,
-                        mgens,
+                        mgens ? new Map(mgens) : null,
                         solutionCb
                     )) {
                         return true;