diff options
| author | Michael Howell <michael@notriddle.com> | 2023-11-17 15:44:29 -0700 |
|---|---|---|
| committer | Michael Howell <michael@notriddle.com> | 2023-11-17 18:22:31 -0700 |
| commit | a66972d5516c9d2e6e1fb99c263ca2aa2fc67b9e (patch) | |
| tree | 5b6e472ba0ee9bba482c267ea8743835305fce37 /src/librustdoc/html/static | |
| parent | c76c2e71f01a61a9b11001b0dc3fe837975f41c0 (diff) | |
| download | rust-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.js | 44 |
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; |
