Skip to content

Commit c1c86f3

Browse files
committed
Add test coverage for upper-/mixed-case Offer encodings
.. to ensure we're able to decode all-uppercase HRPs and reject mixed-case encodings.
1 parent c247d6d commit c1c86f3

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

lightning/src/offers/parse.rs

+14
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ impl From<secp256k1::Error> for Bolt12ParseError {
233233
mod bolt12_tests {
234234
use super::Bolt12ParseError;
235235
use crate::offers::offer::Offer;
236+
use bech32::primitives::decode::{CheckedHrpstringError, UncheckedHrpstringError, CharError};
236237

237238
#[test]
238239
fn encodes_offer_as_bech32_without_checksum() {
@@ -249,6 +250,9 @@ mod bolt12_tests {
249250
// A complete string is valid
250251
"lno1pqps7sjqpgtyzm3qv4uxzmtsd3jjqer9wd3hy6tsw35k7msjzfpy7nz5yqcnygrfdej82um5wf5k2uckyypwa3eyt44h6txtxquqh7lz5djge4afgfjn7k4rgrkuag0jsd5xvxg",
251252

253+
// An all-uppercase string is valid
254+
&"lno1pqps7sjqpgtyzm3qv4uxzmtsd3jjqer9wd3hy6tsw35k7msjzfpy7nz5yqcnygrfdej82um5wf5k2uckyypwa3eyt44h6txtxquqh7lz5djge4afgfjn7k4rgrkuag0jsd5xvxg".to_uppercase(),
255+
252256
// + can join anywhere
253257
"l+no1pqps7sjqpgtyzm3qv4uxzmtsd3jjqer9wd3hy6tsw35k7msjzfpy7nz5yqcnygrfdej82um5wf5k2uckyypwa3eyt44h6txtxquqh7lz5djge4afgfjn7k4rgrkuag0jsd5xvxg",
254258

@@ -282,6 +286,16 @@ mod bolt12_tests {
282286
}
283287
}
284288
}
289+
290+
#[test]
291+
fn fails_parsing_bech32_encoded_offers_with_mixed_casing() {
292+
// We assert that mixed-case encoding fails to parse.
293+
let mixed_case_offer = "lno1pqpS7sjqpgtyzm3qv4uxzmtsd3jjqer9wd3hy6tsw35k7msjzfpy7nz5yqcnygrfdej82um5wf5k2uckyypwa3eyt44h6txtxquqh7lz5djge4afgfjn7k4rgrkuag0jsd5xvxg";
294+
match mixed_case_offer.parse::<Offer>() {
295+
Ok(_) => panic!("Valid offer: {}", mixed_case_offer),
296+
Err(e) => assert_eq!(e, Bolt12ParseError::Bech32(CheckedHrpstringError::Parse(UncheckedHrpstringError::Char(CharError::MixedCase)))),
297+
}
298+
}
285299
}
286300

287301
#[cfg(test)]

0 commit comments

Comments
 (0)