Range check for b64 Alphabet

This commit is contained in:
Michael Theos 2021-03-12 00:26:12 +11:00
parent 47351c126d
commit ca3678cddb
1 changed files with 17 additions and 4 deletions

View File

@ -1,11 +1,24 @@
"use strict"; "use strict";
const b64Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' // var b64Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
function toCharCode(ch) {
return ch.charCodeAt(0);
}
function isValidB64Char(charCode) {
return charCode >= toCharCode('A') && charCode <= toCharCode('Z')
|| charCode >= toCharCode('a') && charCode <= toCharCode('z')
|| charCode >= toCharCode('0') && charCode <= toCharCode('9')
|| charCode === toCharCode('+')
|| charCode === toCharCode('/')
|| charCode === toCharCode('=');
}
function atob(str) { function atob(str) {
for (const ch of str) for (var idx in str)
if (!b64Alphabet.includes(ch)) if (!isValidB64Char(str.charCodeAt(idx)))
throw new Error(`Invalid character '${ch}' in base64 String`); throw new Error('Invalid character ' + str.charAt(idx) + ' in base64 String');
return Buffer.from(str, 'base64').toString('binary'); return Buffer.from(str, 'base64').toString('binary');
} }