Forráskód Böngészése

Fixed bug in Base62 operations when using different alphabets

n1474335 5 éve
szülő
commit
cce84c3782

+ 12 - 5
src/core/operations/FromBase62.mjs

@@ -42,15 +42,22 @@ class FromBase62 extends Operation {
      */
      */
     run(input, args) {
     run(input, args) {
         if (input.length < 1) return [];
         if (input.length < 1) return [];
-        const ALPHABET = Utils.expandAlphRange(args[0]).join("");
-        const BN = BigNumber.clone({ ALPHABET });
+        const alphabet = Utils.expandAlphRange(args[0]).join("");
+        const BN62 = BigNumber.clone({ ALPHABET: alphabet });
 
 
-        const re = new RegExp("[^" + ALPHABET.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g");
+        const re = new RegExp("[^" + alphabet.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g");
         input = input.replace(re, "");
         input = input.replace(re, "");
 
 
-        const number = new BN(input, 62);
+        // Read number in using Base62 alphabet
+        const number = new BN62(input, 62);
+        // Copy to new BigNumber object that uses the default alphabet
+        const normalized = new BigNumber(number);
 
 
-        return Utils.convertToByteArray(number.toString(16), "Hex");
+        // Convert to hex and add leading 0 if required
+        let hex = normalized.toString(16);
+        if (hex.length % 2 !== 0) hex = "0" + hex;
+
+        return Utils.convertToByteArray(hex, "Hex");
     }
     }
 
 
 }
 }

+ 6 - 3
src/core/operations/ToBase62.mjs

@@ -44,12 +44,15 @@ class ToBase62 extends Operation {
         input = new Uint8Array(input);
         input = new Uint8Array(input);
         if (input.length < 1) return "";
         if (input.length < 1) return "";
 
 
-        const ALPHABET = Utils.expandAlphRange(args[0]).join("");
-        const BN = BigNumber.clone({ ALPHABET });
+        const alphabet = Utils.expandAlphRange(args[0]).join("");
+        const BN62 = BigNumber.clone({ ALPHABET: alphabet });
 
 
         input = toHexFast(input).toUpperCase();
         input = toHexFast(input).toUpperCase();
 
 
-        const number = new BN(input, 16);
+        // Read number in as hex using normal alphabet
+        const normalized = new BigNumber(input, 16);
+        // Copy to BigNumber clone that uses the specified Base62 alphabet
+        const number = new BN62(normalized);
 
 
         return number.toString(62);
         return number.toString(62);
     }
     }