mirror of https://github.com/kiwix/libkiwix.git
Handling of suggestions containing special symbols
This change fixes two issues: 1. Presence of URL-specific special symbols (such as ? or #) in the book and/or article name resulted in a wrong suggestion link. This is fixed by URI-encoding the book name and the path, too. 2. Presence of a single quote symbol in the book and/or article name resulted in invalid javascript code in the href attribute of the suggestion link. The single quote (') symbol is not URL-encoded (unlike its double quote counterpart). As a result, enclosing a URL-encoded string in single quotes may result in invalid javascript. Using double quotes instead is safe, since both double quote (") and backslash (\) symbols (which are the only special symbols for such quoting) undergo URL-encoding.
This commit is contained in:
parent
12140098e6
commit
f3d2f474a7
|
@ -346,13 +346,19 @@ function setupSuggestions() {
|
||||||
},
|
},
|
||||||
resultItem: {
|
resultItem: {
|
||||||
element: (item, data) => {
|
element: (item, data) => {
|
||||||
let searchLink;
|
const uriEncodedBookName = encodeURIComponent(currentBook);
|
||||||
|
let url;
|
||||||
if (data.value.kind == "path") {
|
if (data.value.kind == "path") {
|
||||||
searchLink = `/${currentBook}/${htmlDecode(data.value.path)}`;
|
const path = encodeURIComponent(htmlDecode(data.value.path));
|
||||||
|
url = `/${uriEncodedBookName}/${path}`;
|
||||||
} else {
|
} else {
|
||||||
searchLink = `/search?content=${encodeURIComponent(currentBook)}&pattern=${encodeURIComponent(htmlDecode(data.value.value))}`;
|
const pattern = encodeURIComponent(htmlDecode(data.value.value));
|
||||||
|
url = `/search?content=${uriEncodedBookName}&pattern=${pattern}`;
|
||||||
}
|
}
|
||||||
const jsAction = `gotoUrl('${searchLink}')`;
|
// url can't contain any double quote and/or backslash symbols
|
||||||
|
// since they should have been URI-encoded. Therefore putting it
|
||||||
|
// inside double quotes should result in valid javascript.
|
||||||
|
const jsAction = `gotoUrl("${url}")`;
|
||||||
const linkText = htmlDecode(data.value.label);
|
const linkText = htmlDecode(data.value.label);
|
||||||
item.innerHTML = makeJSLink(jsAction, linkText, 'class="suggest"');
|
item.innerHTML = makeJSLink(jsAction, linkText, 'class="suggest"');
|
||||||
},
|
},
|
||||||
|
|
|
@ -69,7 +69,7 @@ const ResourceCollection resources200Compressible{
|
||||||
{ DYNAMIC_CONTENT, "/ROOT/skin/taskbar.css" },
|
{ DYNAMIC_CONTENT, "/ROOT/skin/taskbar.css" },
|
||||||
{ STATIC_CONTENT, "/ROOT/skin/taskbar.css?cacheid=216d6b5d" },
|
{ STATIC_CONTENT, "/ROOT/skin/taskbar.css?cacheid=216d6b5d" },
|
||||||
{ DYNAMIC_CONTENT, "/ROOT/skin/viewer.js" },
|
{ DYNAMIC_CONTENT, "/ROOT/skin/viewer.js" },
|
||||||
{ STATIC_CONTENT, "/ROOT/skin/viewer.js?cacheid=e250a5c9" },
|
{ STATIC_CONTENT, "/ROOT/skin/viewer.js?cacheid=23966598" },
|
||||||
{ DYNAMIC_CONTENT, "/ROOT/skin/fonts/Poppins.ttf" },
|
{ DYNAMIC_CONTENT, "/ROOT/skin/fonts/Poppins.ttf" },
|
||||||
{ STATIC_CONTENT, "/ROOT/skin/fonts/Poppins.ttf?cacheid=af705837" },
|
{ STATIC_CONTENT, "/ROOT/skin/fonts/Poppins.ttf?cacheid=af705837" },
|
||||||
{ DYNAMIC_CONTENT, "/ROOT/skin/fonts/Roboto.ttf" },
|
{ DYNAMIC_CONTENT, "/ROOT/skin/fonts/Roboto.ttf" },
|
||||||
|
@ -291,7 +291,7 @@ R"EXPECTEDRESULT( <img src="../skin/download.png?
|
||||||
/* url */ "/ROOT/viewer",
|
/* url */ "/ROOT/viewer",
|
||||||
R"EXPECTEDRESULT( <link type="text/css" href="./skin/taskbar.css?cacheid=216d6b5d" rel="Stylesheet" />
|
R"EXPECTEDRESULT( <link type="text/css" href="./skin/taskbar.css?cacheid=216d6b5d" rel="Stylesheet" />
|
||||||
<link type="text/css" href="./skin/css/autoComplete.css?cacheid=08951e06" rel="Stylesheet" />
|
<link type="text/css" href="./skin/css/autoComplete.css?cacheid=08951e06" rel="Stylesheet" />
|
||||||
<script type="text/javascript" src="./skin/viewer.js?cacheid=e250a5c9" defer></script>
|
<script type="text/javascript" src="./skin/viewer.js?cacheid=23966598" defer></script>
|
||||||
<script type="text/javascript" src="./skin/autoComplete.min.js?cacheid=1191aaaf"></script>
|
<script type="text/javascript" src="./skin/autoComplete.min.js?cacheid=1191aaaf"></script>
|
||||||
const blankPageUrl = root + "/skin/blank.html?cacheid=6b1fa032";
|
const blankPageUrl = root + "/skin/blank.html?cacheid=6b1fa032";
|
||||||
<label for="kiwix_button_show_toggle"><img src="./skin/caret.png?cacheid=22b942b4" alt=""></label>
|
<label for="kiwix_button_show_toggle"><img src="./skin/caret.png?cacheid=22b942b4" alt=""></label>
|
||||||
|
|
Loading…
Reference in New Issue