Skip to content

Commit 2a4aec7

Browse files
authored
Merge commit from fork
Fix search XSS issues
2 parents 00d0f30 + 9f4e5d3 commit 2a4aec7

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

assets/js/application.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ var Search = {
232232
if(term != Search.currentSearch) {
233233
Search.currentSearch = term;
234234
const language = document.querySelector("html")?.getAttribute("lang");
235-
const allResultsURL = `${baseURLPrefix}search/results?search=${term}${language && `&language=${language}`}`;
235+
const allResultsURL = `${baseURLPrefix}search/results?search=${encodeURIComponent(term)}${language && `&language=${encodeURIComponent(language)}`}`;
236236
$("#search-results").html(`
237237
<header> Search Results </header>
238238
<table>
@@ -242,7 +242,7 @@ var Search = {
242242
<td class="matches">
243243
<ul>
244244
<li>
245-
<a class="highlight" id="show-results-label" href="${allResultsURL}">
245+
<a class="highlight" id="show-results-label">
246246
Searching for <span id="search-term">&nbsp;</span>...
247247
</a>
248248
</li>
@@ -273,6 +273,9 @@ var Search = {
273273
</table>
274274
`);
275275
$("#search-term").text(term);
276+
// Set the link target safely (no HTML parsing).
277+
$("#show-results-label").attr("href", allResultsURL);
278+
276279
this.initializeSearchIndex(async () => {
277280
const results = await Search.pagefind.debouncedSearch(term);
278281
if (results === null || results.results.length === 0) {
@@ -325,7 +328,11 @@ var Search = {
325328
if (!i || typeof results.results[i - 1].data === 'object') categorizeResult(i);
326329
result.data.meta.title = result.data.meta.title.replace(/^Git - (.*) Documentation$/, "$1")
327330
result.data.url = result.data.url.replace(/\.html$/, '')
328-
result.li.html(`<a href = "${result.data.url}">${result.data.meta.title}</a>`);
331+
// Build result item safely (no HTML parsing).
332+
const a = $("<a>");
333+
a.attr("href", result.data.url);
334+
a.text(result.data.meta.title);
335+
result.li.empty().append(a);
329336
})(displayCount).catch((err) => {
330337
console.log(err);
331338
result.li.html(`<i>Error loading result</i>`);
@@ -362,7 +369,7 @@ var Search = {
362369
const term = $('#search-text').val();
363370
if (!term) return;
364371
const language = document.querySelector("html")?.getAttribute("lang");
365-
url = `${baseURLPrefix}search/results?search=${term}${language && `&language=${language}`}`;
372+
url = `${baseURLPrefix}search/results?search=${encodeURIComponent(term)}${language && `&language=${encodeURIComponent(language)}`}`;
366373
}
367374
window.location.href = url;
368375
selectedIndex = 0;

0 commit comments

Comments
 (0)