Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto Apto para principiantes
#9,617 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

@bhuvan-somisetty ya está trabajando en esto.

Desde el 10/10/2026.

  • #9618 de @bhuvan-somisetty — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
62/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
c
Área
backend

Línea de trabajo

El error está en json_to_bitcoin_amount() en common/json_parse.c, donde la comprobación de desbordamiento compara la misma expresión envuelta consigo misma, y el análisis de números acepta un '-' inicial y tokens vacíos. Empieza leyendo esa función y la llamada a strtoul, luego busca las pruebas existentes de json_parse y añade las tres entradas reportadas como casos. Está terminado cuando las tres devuelven false y los importes válidos siguen analizándose correctamente.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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)

Lenguaje dominante
C
Estrellas
3.1k
Forks
1k
Merge medio
3 d 7 h
PR fusionados (30 d)
42

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de ElementsProject/lightning

Todos los issues de ElementsProject/lightning

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.