From a87c8a74b534f49559d465be0666b4a4459c99f5 Mon Sep 17 00:00:00 2001 From: practicalswift Date: Mon, 15 Jan 2018 15:51:06 +0100 Subject: [PATCH] Avoid segfault on CLI command "decodepay 1111111" (invalid short bech32 string) Before this patch: ``` $ cli/lightning-cli decodepay 1111111111 "Invalid bolt11: Bad bech32 string" $ cli/lightning-cli decodepay 111111111 "Invalid bolt11: Bad bech32 string" $ cli/lightning-cli decodepay 11111111 "Invalid bolt11: Bad bech32 string" $ cli/lightning-cli decodepay 1111111 lightning-cli: Non-object response '' $ cli/lightning-cli decodepay 1111111 lightning-cli: Connecting to 'lightning-rpc': Connection refused ``` After this patch: ``` $ cli/lightning-cli decodepay 1111111111 "Invalid bolt11: Bad bech32 string" $ cli/lightning-cli decodepay 111111111 "Invalid bolt11: Bad bech32 string" $ cli/lightning-cli decodepay 11111111 "Invalid bolt11: Bad bech32 string" $ cli/lightning-cli decodepay 1111111 "Invalid bolt11: Bad bech32 string" $ cli/lightning-cli decodepay 1111111 "Invalid bolt11: Bad bech32 string" ``` --- common/bolt11.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common/bolt11.c b/common/bolt11.c index 03498bffa..9035834c6 100644 --- a/common/bolt11.c +++ b/common/bolt11.c @@ -474,6 +474,9 @@ struct bolt11 *bolt11_decode(const tal_t *ctx, const char *str, b11->routes = tal_arr(b11, struct route_info *, 0); + if (strlen(str) < 8) + return decode_fail(b11, fail, "Bad bech32 string"); + hrp = tal_arr(tmpctx, char, strlen(str) - 6); data = tal_arr(tmpctx, u5, strlen(str) - 8);