Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

common/json_parse: json_to_bitcoin_amount fails to detect overflow and accepts negative/empty inputs

Aperta Adatta ai principianti
#9,617 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 2 giorni

@bhuvan-somisetty ci sta già lavorando.

Dal 10/10/2026.

  • #9618 di @bhuvan-somisetty — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
62/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
c
Ambito
backend

Direzione di ricerca

Il bug è in json_to_bitcoin_amount() in common/json_parse.c, dove il controllo di overflow confronta la stessa espressione con overflow con se stessa, e il parsing dei numeri accetta un '-' iniziale e token vuoti. Inizia leggendo quella funzione e la chiamata a strtoul, poi trova i test json_parse esistenti e aggiungi i tre input segnalati come casi. È completato quando tutti e tre restituiscono false e gli importi validi continuano a essere analizzati correttamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Issue and Steps to Reproduce

json_to_bitcoin_amount() in common/json_parse.c has multiple parsing and overflow validation flaws:

  1. Tautological overflow check:

    *satoshi = btc * (uint64_t)100000000 + sat;
    if (*satoshi != btc * (uint64_t)100000000 + sat)
        return false;
    

    Both sides of *satoshi != btc * (uint64_t)100000000 + sat evaluate the exact same uint64_t wrapped value after an overflow. When btc is large (e.g. 184467440738), btc * 100000000 overflows uint64_t and wraps around, but the check evaluates wrapped_val != wrapped_val (which is false), returning true with a corrupted satoshi value.

  2. Negative numbers & signs accepted:
    strtoul accepts leading '-' and converts negative values (such as "-1.00000000" or "-0.00000001") into large unsigned values (e.g. ULONG_MAX), wrapping around during multiplication and returning true.

  3. Empty tokens:
    An empty token (tok->start == tok->end) is parsed as 0 satoshis and returns true instead of returning false.

Steps to reproduce

Call json_to_bitcoin_amount() with:

  • "184467440738.00000000": returns true with wrapped amount 90448385 instead of false.
  • "-1.00000000": returns true with corrupted amount instead of false.
  • "": returns true with 0 satoshis instead of false.
getinfo output

N/A (C unit parsing logic in common/json_parse.c)

Lingua principale
C
Stelle
3.1k
Fork
1k
Merge medio
3g 7h
PR unite (30g)
42

Preparare l'ambiente

  • Include un Dockerfile o un file Docker Compose
  • Ha un modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ElementsProject/lightning

Tutte le issue di ElementsProject/lightning

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.