2016-06-28 5 views
2

私はhttps://developer.mozilla.org/en-US/Add-ons/Code_snippets/StringViewこのmozillaベース64バイトエンコーダを修正しました

を使用して、いくつかのbase64変換を行っています。私にはバグがありますが、それを修正する方法がわかりません。私がしなければ私のテストで

var name = new StringView("ZipFile.zip").toBase64(); 
console.log("Original Text = " + StringView.makeFromBase64(name)); 

私は私の元のテキストを取り戻すしていない - 私は "ZipFile.zi" を取得

私は図書館はパディングが間違って計算されると思いますが、Iそれを修正するかどうかはわからないよ - WmlwRmlsZS56aXAAあり、この入力のための文字列を生成し bytesToBase64()方法をして、正しい値であるべき時に結果 WmlwRmlsZS56aX==を与えるために、最後の2つの値を置き換える正規表現の先読みを持って WmlwRmlsZS56aXA=

は、以下の機能をエンコードしている - 最後に正規表現で:

/* Base64 string to array encoding */ 

StringView.bytesToBase64 = function (aBytes) { 

    var sB64Enc = ""; 

    for (var nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) { 
    nMod3 = nIdx % 3; 
    nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24); 
    if (nMod3 === 2 || aBytes.length - nIdx === 1) { 
     sB64Enc += String.fromCharCode(StringView.uint6ToB64(nUint24 >>> 18 & 63), StringView.uint6ToB64(nUint24 >>> 12 & 63), StringView.uint6ToB64(nUint24 >>> 6 & 63), StringView.uint6ToB64(nUint24 & 63)); 
     nUint24 = 0; 
    } 
    } 

    return sB64Enc.replace(/A(?=A$|$)/g, "="); 

}; 

私は問題を解決する方法を見つけ出すことを試みたが、私はそれが正規表現であればわからない、または途中エンコーディングことライブラリはsB64Enc値を生成する前にsB64Enc値を生成しています。

問題は、sB64Enc.replace(/ A(?= A $ | $)/ g、 "=");グローバルにするべきではありません。 sB64Enc.replace(/ A(?= A $ | $)/、 "=");

+1

バグを報告しました:https://bugzilla.mozilla.org/show_bug.cgi?id=1298724 – Anri

+0

ありがとうございました!私はバグを報告しませんでした。なぜなら、これは文字通りウェブページからのコピー/ペーストモジュールです(それは、より公式にするために時間を費やしていないようです) – Derek

+0

第三者の貢献であること。 Btw私はTextEncoder TextDecoderを使ってこの影の代わりにBuffer fallbackを使いました:-D https://github.com/feross/buffer – Anri

答えて

0

私はライブラリの作者です。バグを報告してくれてありがとう!

今やバグhas been fixedとなり、コードもon GitHubに公開されました。

関連する問題