Added alphabet check before decoding #7
							
								
								
									
										21
									
								
								node-atob.js
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								node-atob.js
									
									
									
									
									
								
							| @ -1,11 +1,24 @@ | ||||
| "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) { | ||||
|   for (const ch of str) | ||||
|     if (!b64Alphabet.includes(ch)) | ||||
|       throw new Error(`Invalid character '${ch}' in base64 String`); | ||||
|   for (var idx in str) | ||||
|     if (!isValidB64Char(str.charCodeAt(idx))) | ||||
|       throw new Error('Invalid character ' + str.charAt(idx) + ' in base64 String'); | ||||
|   return Buffer.from(str, 'base64').toString('binary'); | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user