Decoder accepts indefinite-length items
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 58/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- javascript, node.js
Direzione di ricerca
Start by tracing the decoder path used by decodeFirstSync and how it handles indefinite-length items; compare that behavior with the encoder’s output and the CBOR specification linked in the issue. Add coverage for the supplied byte sequence and verify that decoding rejects it in strict or canonical mode, while checking existing tests for any intended lenient behavior.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
RFC 8949 section 4.2.1 forbids indefinite-length items in the deterministic encoding profile, and DAG-CBOR forbids them outright, because the same value then has more than one valid encoding.
Specification: https://ipld.io/specs/codecs/dag-cbor/spec/
Problem
node-cbor accepts an input that its own encoder would
never produce. Decoding the witness below succeeds, and re-encoding the
decoded value with the same library yields different bytes. The library is
therefore not the inverse of itself on this input, so two peers that disagree
about whether to accept it will disagree about the value's encoding, and any
system that treats the encoding as identifying (content addressing, signature
preimages, deduplication) can be made to see two encodings of one value.
Version tested: cbor 10.0.12
Reproduction
import cbor from 'cbor';
const buf = Buffer.from('bf617007617007ff', 'hex');
const v = cbor.decodeFirstSync(buf);
const re = Buffer.from(cbor.encodeOne(v));
console.log('input :', buf.toString('hex'));
console.log('decoded :', JSON.stringify(v, (_k, x) => typeof x === 'bigint' ? x.toString() : x));
console.log('re-encode:', re.toString('hex'));
console.log(re.equals(buf) ? 'ROUNDTRIP-STABLE' : 'REENCODE-DIFFERS');
Observed output:
input : bf617007617007ff
decoded : {"p":7}
re-encode: a1617007
REENCODE-DIFFERS
The re-encoding differs from the input, which is the defect.
Expected behavior
The decoder should reject this input rather than accept it, because the
encoding is not the canonical one for the decoded value. A canonical encoding of the same value is 07, which round-trips byte-identically.
Suggested fix
Reject the indefinite-length initial byte outright when decoding, rather than
assembling the chunks into a definite-length value. A strict/canonical decode
mode is the usual place for this if the lenient behaviour must stay available.
- Lingua principale
- JavaScript
- Stelle
- 379
- Fork
- 73
- Merge medio
- 7m
- PR unite (30g)
- 1
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Nessuna 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.
Altre issue di hildjj/node-cbor
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 42/100
-
enhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 36/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
Tutte le issue di hildjj/node-cbor
Issue simili
-
enhancement ready
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
DCGM/semant-demo#708 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
agents area: runtime automation chore cli consistency dependencies developer-experience difficulty: easy documentation enhancement good first issue help wanted hygiene json-output priority: P3 starters tests
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Client codegen: an import repeated in an impl file is emitted twice, and the browser rejects the moduleForse già presa @MalithaPrabhashana l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
jaseci-labs/jac#10756 ·
I maintainer di solito rispondono entro 1 giorno