webtorrent / webtorrent/node-bencode
`node-bencode` can produce dictionary entries with duplicate keys.
Nessuno ha ancora preso questa issue.
- Lingua principale
- JavaScript
- Stelle
- 173
- Fork
- 38
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
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.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia dalle righe 53-55 di lib/encode.js e dall’implementazione collegata di uint8-util _node.js; esegui la prova di concetto fornita per lone-surrogate. Traccia il modo in cui le chiavi JavaScript diventano byte UTF-8 e aggiungi un controllo di regressione per l’oggetto segnalato. Il lavoro è completato quando la codifica non emette più voci del dizionario con chiavi duplicate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- javascript, node.js
- Ambito
- backend
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100