Added alphabet check before decoding #7
@ -1,6 +1,11 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
const b64Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
 | 
			
		||||
 | 
			
		||||
function atob(str) {
 | 
			
		||||
  for (const ch of str)
 | 
			
		||||
    if (!b64Alphabet.includes(ch))
 | 
			
		||||
      throw new Error(`Invalid character '${ch}' in base64 String`);
 | 
			
		||||
  return Buffer.from(str, 'base64').toString('binary');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								test.js
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								test.js
									
									
									
									
									
								
							@ -4,6 +4,7 @@
 | 
			
		||||
  var atob = require('.');
 | 
			
		||||
  var encoded = "SGVsbG8sIFdvcmxkIQ=="
 | 
			
		||||
  var unencoded = "Hello, World!";
 | 
			
		||||
  var malformed = "SGVsbG8s{"
 | 
			
		||||
  /*
 | 
			
		||||
    , encoded = "SGVsbG8sIBZM"
 | 
			
		||||
    , unencoded = "Hello, 世界"
 | 
			
		||||
@ -14,5 +15,13 @@
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    const decoded = atob(malformed)
 | 
			
		||||
    console.log('[FAIL]', malformed, decoded);
 | 
			
		||||
    return;
 | 
			
		||||
  } catch (_) {
 | 
			
		||||
    /* pass */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  console.log('[PASS] all tests pass');
 | 
			
		||||
}());
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user