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] || "";
|
||||
}
|
||||
|
||||
const hashReplacements = new Map([
|
||||
["%", "."],
|
||||
["(", ".28"],
|
||||
[")", ".29"],
|
||||
[".", ".2E"],
|
||||
]);
|
||||
|
||||
// Some browsers zealously URI-decode the contents of
|
||||
// window.location.hash. So we hide our URI-encoding
|
||||
// by replacing % with . (like MediaWiki).
|
||||
export function encodeHashComponent(str) {
|
||||
const characterToBeReplaced = {
|
||||
".": ".2E",
|
||||
"%": ".",
|
||||
"(": ".28",
|
||||
")": ".29",
|
||||
};
|
||||
return encodeURIComponent(str).replace(/[%().]/g, (matched) => characterToBeReplaced[matched]);
|
||||
return encodeURIComponent(str).replace(/[%().]/g, (matched) => hashReplacements.get(matched));
|
||||
}
|
||||
|
||||
export function encode_operand(operator, operand) {
|
||||
|
||||
Reference in New Issue
Block a user