`node-bencode` can produce dictionary entries with duplicate keys.
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- javascript, node.js
- Lĩnh vực
- backend
Hướng nghiên cứu
Bắt đầu với các dòng 53-55 trong lib/encode.js và phần triển khai uint8-util _node.js được liên kết; chạy proof of concept lone-surrogate được cung cấp. Theo dõi cách các khóa JavaScript trở thành các byte UTF-8 và thêm một kiểm tra hồi quy cho đối tượng được báo cáo. Hoàn tất khi việc mã hóa đối tượng đó không còn phát ra các mục từ điển có khóa trùng lặp.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Bug
node-bencode can produce dictionary entries with duplicate keys.
node-bencode assumes that binary string keys made out of unique Javascript string keys are unique as well, which is false.
https://github.com/webtorrent/node-bencode/blob/ee70f267c8d34b9a94820ca8c42cd67d1274fc89/lib/encode.js#L53-L55
https://github.com/ThaUnknown/uint8-util/blob/149c44c010b3ad17a7904c4266545bbca1fd4403/_node.js#L13
encode.string = function (buffers, data) {
buffers.push(text2arr(text2arr(data).byteLength + ':' + data))
}
export const text2arr = str => new Uint8Array(Buffer.from(str, 'utf8'))
Proof-of-concept
For example, let node-bencode try encoding {"\uD800": 1, "\uDFFF": 2}. It’ll produce dictionary entries with the duplicate key, "3:\xEF\xBF\xBD".
const lone_surrogates = "\uD800\uDFFF";
// Lone (“unmatched”) UTF-16 surrogates. Invalid in UTF-16.
const a = Buffer.from(lone_surrogates[0], "UTF-8");
const b = Buffer.from(lone_surrogates[1], "UTF-8");
// Decoding the Javascript strings in UTF-16 and encoding them into UTF-8.
console.log(a, a.toString(), b, b.toString());
// Since those Javascript strings are invalid in UTF-16,
// those lone surrogates are decoded
// into `REPLACEMENT CHARACTER`s (U+FFFD)
// and subsequently encoded into `<Buffer ef bf bd>`.
// Meaning,
console.log(a.equals(b));
// is true, when (lone_surrogates[0] === lone_surrogates[1]) is false.
- Ngôn ngữ chính
- JavaScript
- Star
- 173
- Fork
- 38
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của webtorrent/node-bencode
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 62/100
webtorrent/node-bencode#162 · 1 reaction ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
webtorrent/node-bencode#178 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 48/100
webtorrent/node-bencode#143 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 58/100
webtorrent/node-bencode#142 ·
-
Dependency Dashboard Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 15/100
webtorrent/node-bencode#103 ·
Tất cả issue của webtorrent/node-bencode
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
HarperFast/skills#96 ·
-
[Block] Latest Posts [Type] Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
Daemon passes --experimental-wasm-jspi unconditionally on Node >= 24; Node 26 rejects the flag Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Automattic/studio#4908 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
sugarlabs/musicblocks#8847 ·