You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Note that, in the context of bencoding, strings, including dictionary keys, are arbitrary byte sequences (uint8_t[]).
And Array.prototype.sort compares 16-bit units by default.
If compareFn is not supplied, all non-undefined array elements are sorted by converting them to strings and comparing strings in UTF-16 code units order.
The simple .sort() results in a different order (sorted_in_utf16) than the correct one (sorted_in_utf8). Observe:
const A = String.fromCodePoint(0xFF61);
const B = String.fromCodePoint(0x10002);
const sorted_in_utf8 = [A, B].sort((a, b) => Buffer.compare(Buffer.from(a), Buffer.from(b))); // [A, B]
const sorted_in_utf16 = [A, B].sort(); // [B, A]
Bug
node-bencode/lib/encode.js
Lines 80 to 81 in 2fa2c7e
This is not the correct way of sorting dictionary entries.
When you say “strings” in the context of Bencoding, you mean “binary strings,” or more specifically, “8-bit byte sequences.”
And
Array.prototype.sort
compares 16-bit units by default.The simple
.sort()
results in a different order (sorted_in_utf16
) than the correct one (sorted_in_utf8
). Observe:Related issues
The text was updated successfully, but these errors were encountered: