bitcoin/short_channel_id: short_channel_id_from_str accepts trailing garbage, negative numbers, and whitespace
Maintainer antworten meist innerhalb von 2 Tagen
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 83/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- c
- Bereich
- backend-api-design
Rechercherichtung
Beginne mit short_channel_id_from_str() in bitcoin/short_channel_id.c und verfolge short_channel_id_dir_from_str(), das die Verarbeitung an diese Funktion delegiert. Prüfe, wie der aktuelle Parser mit den angegebenen ungültigen Beispielen umgeht, und stelle dann sicher, dass das Parsen fehlerhafte Eingaben zurückweist und das angegebene Dezimalformat mit drei Komponenten akzeptiert. Fertig ist die Aufgabe, wenn Beispiele mit nachgestellten Zeichen, negativen Werten, Vorzeichen oder Leerraum zurückgewiesen werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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).
- Vorherrschende Sprache
- C
- Sterne
- 3.1k
- Forks
- 1k
- Ø Merge
- 4 T. 21 Std.
- Gemergte PRs (30 T.)
- 21
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus ElementsProject/lightning
-
common/amount: parse_amount_sat misparses sub-satoshi msat with leading zero and accepts invalid suffixesEvtl. vergeben @bhuvan-somisetty hat das vor 10 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
ElementsProject/lightning#9674 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
createrune accepts an empty restriction, after which showrunes crashes lightningd (SIGSEGV)Evtl. vergeben @amartya1523 hat das vor 4 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
ElementsProject/lightning#9673 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
ElementsProject/lightning#9671 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
ElementsProject/lightning#9634 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
plugins/recover: missing comma in nodes_for_gossip concatenates two bootstrap addresses into invalid addressEvtl. vergeben @bhuvan-somisetty hat das vor 23 Tagen übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
ElementsProject/lightning#9630 ·
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in ElementsProject/lightning
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
onehumanbeing/esp32-iphone-agent#118 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:http-gateway decision priority:low status:needs-info type:feature
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
crazy-goat/php-fpm-ng#1093 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
micropython/micropython#19906 ·
Maintainer antworten meist innerhalb von 1 Tag
-
QOI: QOI_OP_RUN does not update the previously seen pixels, corrupting qoi_test_images/edgecase.qoiEvtl. vergeben @manit2004 hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
python-pillow/Pillow#10452 · 4 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:data coverage
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 83/100
reacher-z/Awesome-CUA#4804 ·
Maintainer antworten meist innerhalb von 19 Tagen