mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
hash_util: Convert object characterToBeReplaced object to map.
Computed indexing into an object, especially with a user-provided key, can be dangerous in JavaScript because of nonsense features like obj["__proto__"]. In this case there’s no vulnerability because the possible keys are strictly limited by the regex, but it’s always better practice to use a Map for computed indexing. Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Tim Abbott
parent
7fd7a1917b
commit
fe28ecb71d
@@ -22,17 +22,18 @@ export function get_hash_section(hash) {
|
|||||||
return parts[1] || "";
|
return parts[1] || "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const hashReplacements = new Map([
|
||||||
|
["%", "."],
|
||||||
|
["(", ".28"],
|
||||||
|
[")", ".29"],
|
||||||
|
[".", ".2E"],
|
||||||
|
]);
|
||||||
|
|
||||||
// Some browsers zealously URI-decode the contents of
|
// Some browsers zealously URI-decode the contents of
|
||||||
// window.location.hash. So we hide our URI-encoding
|
// window.location.hash. So we hide our URI-encoding
|
||||||
// by replacing % with . (like MediaWiki).
|
// by replacing % with . (like MediaWiki).
|
||||||
export function encodeHashComponent(str) {
|
export function encodeHashComponent(str) {
|
||||||
const characterToBeReplaced = {
|
return encodeURIComponent(str).replace(/[%().]/g, (matched) => hashReplacements.get(matched));
|
||||||
".": ".2E",
|
|
||||||
"%": ".",
|
|
||||||
"(": ".28",
|
|
||||||
")": ".29",
|
|
||||||
};
|
|
||||||
return encodeURIComponent(str).replace(/[%().]/g, (matched) => characterToBeReplaced[matched]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function encode_operand(operator, operand) {
|
export function encode_operand(operator, operand) {
|
||||||
|
|||||||
Reference in New Issue
Block a user