From d76278bc1e6491d75b6adf93e4f41934fc387521 Mon Sep 17 00:00:00 2001 From: eugene Date: Wed, 11 May 2022 13:47:41 -0400 Subject: [PATCH] invoices: properly set Preimage for settle resolutions This fixes a nil-pointer-dereference that would occur if this was called for a settled AMP invoice. Terms.PaymentPreimage is always false for AMP invoices. --- invoices/update.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/invoices/update.go b/invoices/update.go index c16fe808d..ddcad6fa9 100644 --- a/invoices/update.go +++ b/invoices/update.go @@ -108,8 +108,16 @@ func updateInvoice(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) ( return nil, ctx.acceptRes(resultReplayToAccepted), nil case channeldb.HtlcStateSettled: + pre := inv.Terms.PaymentPreimage + + // Terms.PaymentPreimage will be nil for AMP invoices. + // Set it to the HTLC's AMP Preimage instead. + if pre == nil { + pre = htlc.AMP.Preimage + } + return nil, ctx.settleRes( - *inv.Terms.PaymentPreimage, + *pre, ResultReplayToSettled, ), nil