From fe741f168af044ccd058284e93eb8d2a73d5bbd8 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Wed, 1 Jan 2020 18:53:24 +0100 Subject: [PATCH] fix early exit on empty addresses in decode_openpgp() --- src/qr.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/qr.rs b/src/qr.rs index fa26c4f1b..eb4845612 100644 --- a/src/qr.rs +++ b/src/qr.rs @@ -69,7 +69,7 @@ fn decode_openpgp(context: &Context, qr: &str) -> Lot { (fp, &rest[1..]) }) { Some(pair) => pair, - None => return format_err!("Invalid OPENPGP4FPR found").into(), + None => (payload, ""), }; // replace & with \n to match expected param format @@ -83,11 +83,11 @@ fn decode_openpgp(context: &Context, qr: &str) -> Lot { let addr = if let Some(addr) = param.get(Param::Forwarded) { match normalize_address(addr) { - Ok(addr) => addr, + Ok(addr) => Some(addr), Err(err) => return err.into(), } } else { - return format_err!("Missing address").into(); + None }; // what is up with that param name? @@ -157,7 +157,7 @@ fn decode_openpgp(context: &Context, qr: &str) -> Lot { lot.state = LotState::QrFprWithoutAddr; lot.text1 = Some(dc_format_fingerprint(&fingerprint)); } - } else { + } else if let Some(addr) = addr { if grpid.is_some() && grpname.is_some() { lot.state = LotState::QrAskVerifyGroup; lot.text1 = grpname; @@ -172,6 +172,8 @@ fn decode_openpgp(context: &Context, qr: &str) -> Lot { lot.fingerprint = Some(fingerprint); lot.invitenumber = invitenumber; lot.auth = auth; + } else { + return format_err!("Missing address").into(); } lot