@@ -937,3 +937,27 @@ def test_invoice_botched_migration(node_factory, chainparams):
937937 assert ([(i ['created_index' ], i ['label' ]) for i in l1 .rpc .listinvoices ()["invoices" ]]
938938 == [(1 , "made_after_bad_migration" ), (2 , "label1" )])
939939 assert l1 .rpc .invoice (100 , "test" , "test" )["created_index" ] == 3
940+
941+
942+ def test_invoice_maxdesc (node_factory , chainparams ):
943+ l1 , l2 = node_factory .line_graph (2 )
944+
945+ # BOLT #11:
946+ #
947+ # Note that the maximum length of a Tagged Field's `data` is constricted
948+ # by the maximum value of `data_length`. This is 1023 x 5 bits, or 639
949+ # bytes.
950+ maxdesc = "x" * 639
951+
952+ # This should fail!
953+ with pytest .raises (RpcError , match = r'Description greater than 639 bytes invalid \(description length 641\)' ):
954+ l1 .rpc .invoice (123000 , 'test_invoice_maxdesc' , maxdesc + 'xx' )
955+
956+ # This should also fail, but used to produce
957+ # lnbcrt1230n1p5dm097sp545trjl795r3mm86mk4ln5jpjvnh04x8aryl3qadjt99vspu646zspp52hf43ln8vg0564ljwccs8d84xc70ls8n7wdmp75ygp7ll8rprqzsdqq0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rcxqyjw5qcqp99qxpqysgqr6l8swzm6jc42ehy4v7s83jrggtwa9ua39cvy46c46tmqwn97mn43ycww7e9cf4w5ws8lxnef2k3m5nfa5c34nz54jaxhzc5e72q0ccq26n9fx
958+ with pytest .raises (RpcError , match = r'Description greater than 639 bytes invalid \(description length 640\)' ):
959+ l1 .rpc .invoice (123000 , 'test_invoice_maxdesc2' , maxdesc + 'x' )
960+
961+ # This should succeed.
962+ inv = l1 .rpc .invoice (123000 , 'test_invoice_maxdesc3' , maxdesc )
963+ assert l1 .rpc .decode (inv ['bolt11' ])['description' ] == maxdesc
0 commit comments