]> Lady’s Gitweb - Pisces/blobdiff - binary.js
Make base32 handling less forgiving
[Pisces] / binary.js
index 5c78d3916cc1dabd25d528d3a72bba443091c8bb..5ee2bda874ae5fcf84a577064c0f8e0c41770895 100644 (file)
--- a/binary.js
+++ b/binary.js
@@ -135,10 +135,13 @@ const decodeBase16 = (source) => {
   );
   const { length } = u4s;
   if (length % 2 == 1) {
+    // The length is such that an entire letter would be dropped during
+    // a forgiving decode.
     throw new RangeError(
       `Piscēs: Base16 string has invalid length: ${source}.`,
     );
   } else {
+    // Every letter contributes at least some bits to the result.
     const dataView = new View(new Buffer(floor(length / 2)));
     for (let index = 0; index < length - 1;) {
       call(viewSetUint8, dataView, [
@@ -224,11 +227,15 @@ const decodeBase32 = (source, wrmg) => {
     },
   );
   const { length } = u5s;
-  if (length % 8 == 1) {
+  const lengthMod8 = length % 8;
+  if (lengthMod8 == 1 || lengthMod8 == 3 || lengthMod8 == 6) {
+    // The length is such that an entire letter would be dropped during
+    // a forgiving decode.
     throw new RangeError(
       `Piscēs: Base32 string has invalid length: ${source}.`,
     );
   } else {
+    // Every letter contributes at least some bits to the result.
     const dataView = new View(new Buffer(floor(length * 5 / 8)));
     for (let index = 0; index < length - 1;) {
       // The final index is not handled; if the string is not divisible
@@ -302,10 +309,13 @@ const decodeBase64 = (source, safe = false) => {
   );
   const { length } = u6s;
   if (length % 4 == 1) {
+    // The length is such that an entire letter would be dropped during
+    // a forgiving decode.
     throw new RangeError(
       `Piscēs: Base64 string has invalid length: ${source}.`,
     );
   } else {
+    // Every letter contributes at least some bits to the result.
     const dataView = new View(new Buffer(floor(length * 3 / 4)));
     for (let index = 0; index < length - 1;) {
       // The final index is not handled; if the string is not divisible
This page took 0.030799 seconds and 4 git commands to generate.