@@ -937,3 +937,27 @@ def test_invoice_botched_migration(node_factory, chainparams):
937
937
assert ([(i ['created_index' ], i ['label' ]) for i in l1 .rpc .listinvoices ()["invoices" ]]
938
938
== [(1 , "made_after_bad_migration" ), (2 , "label1" )])
939
939
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