bitcoin/short_channel_id: short_channel_id_from_str accepts trailing garbage, negative numbers, and whitespace
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 83/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- c
- Ambito
- backend-api-design
Direzione di ricerca
Inizia da short_channel_id_from_str() in bitcoin/short_channel_id.c e segui short_channel_id_dir_from_str(), che delega a questa funzione. Verifica come il parser attuale gestisce gli esempi non validi forniti, quindi assicurati che l’analisi rifiuti gli input malformati e accetti il formato decimale specificato a tre componenti. Il lavoro è completato quando vengono rifiutati gli esempi con caratteri finali, valori negativi, segni o spazi bianchi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Issue and Steps to Reproduce
short_channel_id_from_str() in bitcoin/short_channel_id.c parses short channel ID strings using sscanf:
bool short_channel_id_from_str(const char *str, size_t strlen,
struct short_channel_id *dst)
{
u32 blocknum, txnum;
u16 outnum;
if (sscanf(str, "%ux%ux%hu", &blocknum, &txnum, &outnum) == 3)
return mk_short_channel_id(dst, blocknum, txnum, outnum);
return false;
}
This implementation allows several invalid string formats to succeed:
- Trailing garbage / unparsed characters:
sscanfdoes not check if the entire buffer length (strlen) is consumed. Strings such as"1x2x3garbage","1x2x3/0","1x2x3x4", or"1x2x3 4"successfully returntruewith validdstfilled from the initial match. - Negative outnums:
%huaccepts negative numbers (e.g."-1"), parsing them as65535((u16)-1). Inmk_short_channel_id(),(outnum & 0xFFFF) != outnumevaluates to65535 != 65535which is false, so"1x2x-1"is accepted as valid channel output 65535. - Leading / internal whitespace and signs:
sscanfskips whitespace before numeric conversions and parses leading+signs, allowing strings like" 1x2x3","1x 2x3", or"+1x2x3". short_channel_id_dir_from_strpollution: Becauseshort_channel_id_dir_from_strdelegates toshort_channel_id_from_str(str, slash - str, ...), strings like"1x2x3garbage/0"are also parsed without error.
Steps to reproduce:
struct short_channel_id scid;
assert(short_channel_id_from_str("1x2x3garbage", strlen("1x2x3garbage"), &scid) == false); // Fails (returns true)
assert(short_channel_id_from_str("1x2x-1", strlen("1x2x-1"), &scid) == false); // Fails (returns true)
Expected behavior:
Per BOLT 7, a short channel ID is uniquely represented by three decimal components delimited by 'x': <blocknum>x<txnum>x<outnum>. short_channel_id_from_str() should strictly parse the entire provided string and reject trailing garbage, negative values, signs, and whitespace.
getinfo output
N/A (observed in bitcoin/short_channel_id.c across all CLN versions).
- Lingua principale
- C
- Stelle
- 3.1k
- Fork
- 1k
- Merge medio
- 4g 21h
- PR unite (30g)
- 21
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un 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 ElementsProject/lightning
-
common/amount: parse_amount_sat misparses sub-satoshi msat with leading zero and accepts invalid suffixesForse già presa @bhuvan-somisetty l’ha presa 10 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
ElementsProject/lightning#9674 ·
I maintainer di solito rispondono entro 2 giorni
-
createrune accepts an empty restriction, after which showrunes crashes lightningd (SIGSEGV)Forse già presa @amartya1523 l’ha presa 4 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ElementsProject/lightning#9673 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ElementsProject/lightning#9671 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
ElementsProject/lightning#9634 ·
I maintainer di solito rispondono entro 2 giorni
-
plugins/recover: missing comma in nodes_for_gossip concatenates two bootstrap addresses into invalid addressForse già presa @bhuvan-somisetty l’ha presa 23 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
ElementsProject/lightning#9630 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di ElementsProject/lightning
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
micropython/micropython#19906 ·
I maintainer di solito rispondono entro 1 giorno
-
QOI: QOI_OP_RUN does not update the previously seen pixels, corrupting qoi_test_images/edgecase.qoiForse già presa @manit2004 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
python-pillow/Pillow#10452 · 4 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
I maintainer di solito rispondono entro 10 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
JPHutchins/dynamic-call-tree-resolution#349 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno