From 64543672476ed27cbb640be09a4855b40e8a0490 Mon Sep 17 00:00:00 2001 From: jikstra Date: Mon, 22 Jul 2019 18:11:12 +0200 Subject: [PATCH] run rustfmt --- src/dc_qr.rs | 433 +++++++++++++++++++++++++-------------------------- 1 file changed, 215 insertions(+), 218 deletions(-) diff --git a/src/dc_qr.rs b/src/dc_qr.rs index 5d6cf82d2..3a217b999 100644 --- a/src/dc_qr.rs +++ b/src/dc_qr.rs @@ -54,249 +54,246 @@ pub unsafe fn dc_check_qr(context: &Context, qr: *const libc::c_char) -> *mut dc return cleanup(); } - info!(context, 0, "Scanned QR code: {}", as_str(qr),); - /* split parameters from the qr code - ------------------------------------ */ - if strncasecmp( - qr, - b"OPENPGP4FPR:\x00" as *const u8 as *const libc::c_char, - strlen(b"OPENPGP4FPR:\x00" as *const u8 as *const libc::c_char), - ) == 0i32 - { - payload = - dc_strdup(&*qr.offset(strlen( - b"OPENPGP4FPR:\x00" as *const u8 as *const libc::c_char, - ) as isize)); - let mut fragment: *mut libc::c_char = strchr(payload, '#' as i32); - if !fragment.is_null() { - *fragment = 0i32 as libc::c_char; - fragment = fragment.offset(1isize); - let param: *mut dc_param_t = dc_param_new(); - dc_param_set_urlencoded(param, fragment); - addr = dc_param_get(param, DC_PARAM_FORWARDED as i32, 0 as *const libc::c_char); - if !addr.is_null() { - let mut urlencoded: *mut libc::c_char = dc_param_get( - param, - DC_PARAM_SET_LONGITUDE as i32, - 0 as *const libc::c_char, - ); + info!(context, 0, "Scanned QR code: {}", as_str(qr),); + /* split parameters from the qr code + ------------------------------------ */ + if strncasecmp( + qr, + b"OPENPGP4FPR:\x00" as *const u8 as *const libc::c_char, + strlen(b"OPENPGP4FPR:\x00" as *const u8 as *const libc::c_char), + ) == 0i32 + { + payload = dc_strdup( + &*qr.offset(strlen(b"OPENPGP4FPR:\x00" as *const u8 as *const libc::c_char) as isize), + ); + let mut fragment: *mut libc::c_char = strchr(payload, '#' as i32); + if !fragment.is_null() { + *fragment = 0i32 as libc::c_char; + fragment = fragment.offset(1isize); + let param: *mut dc_param_t = dc_param_new(); + dc_param_set_urlencoded(param, fragment); + addr = dc_param_get(param, DC_PARAM_FORWARDED as i32, 0 as *const libc::c_char); + if !addr.is_null() { + let mut urlencoded: *mut libc::c_char = dc_param_get( + param, + DC_PARAM_SET_LONGITUDE as i32, + 0 as *const libc::c_char, + ); + if !urlencoded.is_null() { + name = dc_urldecode(urlencoded); + dc_normalize_name(name); + free(urlencoded as *mut libc::c_void); + } + invitenumber = dc_param_get( + param, + DC_PARAM_PROFILE_IMAGE as i32, + 0 as *const libc::c_char, + ); + auth = dc_param_get(param, 's' as i32, 0 as *const libc::c_char); + grpid = dc_param_get(param, 'x' as i32, 0 as *const libc::c_char); + if !grpid.is_null() { + urlencoded = dc_param_get(param, 'g' as i32, 0 as *const libc::c_char); if !urlencoded.is_null() { - name = dc_urldecode(urlencoded); - dc_normalize_name(name); + grpname = dc_urldecode(urlencoded); free(urlencoded as *mut libc::c_void); } - invitenumber = dc_param_get( - param, - DC_PARAM_PROFILE_IMAGE as i32, - 0 as *const libc::c_char, - ); - auth = dc_param_get(param, 's' as i32, 0 as *const libc::c_char); - grpid = dc_param_get(param, 'x' as i32, 0 as *const libc::c_char); - if !grpid.is_null() { - urlencoded = dc_param_get(param, 'g' as i32, 0 as *const libc::c_char); - if !urlencoded.is_null() { - grpname = dc_urldecode(urlencoded); - free(urlencoded as *mut libc::c_void); - } - } } - dc_param_unref(param); } - fingerprint = dc_normalize_fingerprint_c(payload); - } else if strncasecmp( - qr, - b"mailto:\x00" as *const u8 as *const libc::c_char, - strlen(b"mailto:\x00" as *const u8 as *const libc::c_char), - ) == 0i32 - { - payload = dc_strdup( - &*qr.offset(strlen(b"mailto:\x00" as *const u8 as *const libc::c_char) as isize), - ); - let query: *mut libc::c_char = strchr(payload, '?' as i32); - if !query.is_null() { - *query = 0i32 as libc::c_char - } - addr = dc_strdup(payload); - } else if strncasecmp( - qr, - b"SMTP:\x00" as *const u8 as *const libc::c_char, - strlen(b"SMTP:\x00" as *const u8 as *const libc::c_char), - ) == 0i32 - { - payload = dc_strdup( - &*qr.offset(strlen(b"SMTP:\x00" as *const u8 as *const libc::c_char) as isize), - ); - let colon: *mut libc::c_char = strchr(payload, ':' as i32); - if !colon.is_null() { - *colon = 0i32 as libc::c_char - } - addr = dc_strdup(payload); - } else if strncasecmp( - qr, - b"MATMSG:\x00" as *const u8 as *const libc::c_char, - strlen(b"MATMSG:\x00" as *const u8 as *const libc::c_char), - ) == 0i32 - { - /* scheme: `MATMSG:TO:addr...;SUB:subject...;BODY:body...;` - there may or may not be linebreaks after the fields */ - /* does not work when the text `TO:` is used in subject/body _and_ TO: is not the first field. we ignore this case. */ - let to: *mut libc::c_char = strstr(qr, b"TO:\x00" as *const u8 as *const libc::c_char); - if !to.is_null() { - addr = dc_strdup(&mut *to.offset(3isize)); - let semicolon: *mut libc::c_char = strchr(addr, ';' as i32); - if !semicolon.is_null() { - *semicolon = 0i32 as libc::c_char - } - } else { - (*qr_parsed).state = 400i32; - (*qr_parsed).text1 = - dc_strdup(b"Bad e-mail address.\x00" as *const u8 as *const libc::c_char); - return cleanup(); + dc_param_unref(param); + } + fingerprint = dc_normalize_fingerprint_c(payload); + } else if strncasecmp( + qr, + b"mailto:\x00" as *const u8 as *const libc::c_char, + strlen(b"mailto:\x00" as *const u8 as *const libc::c_char), + ) == 0i32 + { + payload = dc_strdup( + &*qr.offset(strlen(b"mailto:\x00" as *const u8 as *const libc::c_char) as isize), + ); + let query: *mut libc::c_char = strchr(payload, '?' as i32); + if !query.is_null() { + *query = 0i32 as libc::c_char + } + addr = dc_strdup(payload); + } else if strncasecmp( + qr, + b"SMTP:\x00" as *const u8 as *const libc::c_char, + strlen(b"SMTP:\x00" as *const u8 as *const libc::c_char), + ) == 0i32 + { + payload = dc_strdup( + &*qr.offset(strlen(b"SMTP:\x00" as *const u8 as *const libc::c_char) as isize), + ); + let colon: *mut libc::c_char = strchr(payload, ':' as i32); + if !colon.is_null() { + *colon = 0i32 as libc::c_char + } + addr = dc_strdup(payload); + } else if strncasecmp( + qr, + b"MATMSG:\x00" as *const u8 as *const libc::c_char, + strlen(b"MATMSG:\x00" as *const u8 as *const libc::c_char), + ) == 0i32 + { + /* scheme: `MATMSG:TO:addr...;SUB:subject...;BODY:body...;` - there may or may not be linebreaks after the fields */ + /* does not work when the text `TO:` is used in subject/body _and_ TO: is not the first field. we ignore this case. */ + let to: *mut libc::c_char = strstr(qr, b"TO:\x00" as *const u8 as *const libc::c_char); + if !to.is_null() { + addr = dc_strdup(&mut *to.offset(3isize)); + let semicolon: *mut libc::c_char = strchr(addr, ';' as i32); + if !semicolon.is_null() { + *semicolon = 0i32 as libc::c_char } } else { - if strncasecmp( - qr, - b"BEGIN:VCARD\x00" as *const u8 as *const libc::c_char, - strlen(b"BEGIN:VCARD\x00" as *const u8 as *const libc::c_char), - ) == 0i32 - { - let lines: *mut carray = dc_split_into_lines(qr); - let mut i: libc::c_int = 0i32; - while (i as libc::c_uint) < carray_count(lines) { - let key: *mut libc::c_char = - carray_get(lines, i as libc::c_uint) as *mut libc::c_char; - dc_trim(key); - let mut value: *mut libc::c_char = strchr(key, ':' as i32); - if !value.is_null() { - *value = 0i32 as libc::c_char; - value = value.offset(1isize); - let mut semicolon_0: *mut libc::c_char = strchr(key, ';' as i32); + (*qr_parsed).state = 400i32; + (*qr_parsed).text1 = + dc_strdup(b"Bad e-mail address.\x00" as *const u8 as *const libc::c_char); + return cleanup(); + } + } else { + if strncasecmp( + qr, + b"BEGIN:VCARD\x00" as *const u8 as *const libc::c_char, + strlen(b"BEGIN:VCARD\x00" as *const u8 as *const libc::c_char), + ) == 0i32 + { + let lines: *mut carray = dc_split_into_lines(qr); + let mut i: libc::c_int = 0i32; + while (i as libc::c_uint) < carray_count(lines) { + let key: *mut libc::c_char = + carray_get(lines, i as libc::c_uint) as *mut libc::c_char; + dc_trim(key); + let mut value: *mut libc::c_char = strchr(key, ':' as i32); + if !value.is_null() { + *value = 0i32 as libc::c_char; + value = value.offset(1isize); + let mut semicolon_0: *mut libc::c_char = strchr(key, ';' as i32); + if !semicolon_0.is_null() { + *semicolon_0 = 0i32 as libc::c_char + } + if strcasecmp(key, b"EMAIL\x00" as *const u8 as *const libc::c_char) == 0i32 { + semicolon_0 = strchr(value, ';' as i32); if !semicolon_0.is_null() { *semicolon_0 = 0i32 as libc::c_char } - if strcasecmp(key, b"EMAIL\x00" as *const u8 as *const libc::c_char) == 0i32 - { - semicolon_0 = strchr(value, ';' as i32); + addr = dc_strdup(value) + } else if strcasecmp(key, b"N\x00" as *const u8 as *const libc::c_char) == 0i32 + { + semicolon_0 = strchr(value, ';' as i32); + if !semicolon_0.is_null() { + semicolon_0 = strchr(semicolon_0.offset(1isize), ';' as i32); if !semicolon_0.is_null() { *semicolon_0 = 0i32 as libc::c_char } - addr = dc_strdup(value) - } else if strcasecmp(key, b"N\x00" as *const u8 as *const libc::c_char) - == 0i32 - { - semicolon_0 = strchr(value, ';' as i32); - if !semicolon_0.is_null() { - semicolon_0 = strchr(semicolon_0.offset(1isize), ';' as i32); - if !semicolon_0.is_null() { - *semicolon_0 = 0i32 as libc::c_char - } - } - name = dc_strdup(value); - dc_str_replace( - &mut name, - b";\x00" as *const u8 as *const libc::c_char, - b",\x00" as *const u8 as *const libc::c_char, - ); - dc_normalize_name(name); } + name = dc_strdup(value); + dc_str_replace( + &mut name, + b";\x00" as *const u8 as *const libc::c_char, + b",\x00" as *const u8 as *const libc::c_char, + ); + dc_normalize_name(name); } - i += 1 } - dc_free_splitted_lines(lines); + i += 1 } + dc_free_splitted_lines(lines); } - /* check the parameters - ---------------------- */ - if !addr.is_null() { - /* urldecoding is needed at least for OPENPGP4FPR but should not hurt in the other cases */ - let mut temp: *mut libc::c_char = dc_urldecode(addr); - free(addr as *mut libc::c_void); - addr = temp; - temp = dc_addr_normalize(addr); - free(addr as *mut libc::c_void); - addr = temp; - if !dc_may_be_valid_addr(addr) { - (*qr_parsed).state = 400i32; - (*qr_parsed).text1 = - dc_strdup(b"Bad e-mail address.\x00" as *const u8 as *const libc::c_char); - return cleanup(); - } + } + /* check the parameters + ---------------------- */ + if !addr.is_null() { + /* urldecoding is needed at least for OPENPGP4FPR but should not hurt in the other cases */ + let mut temp: *mut libc::c_char = dc_urldecode(addr); + free(addr as *mut libc::c_void); + addr = temp; + temp = dc_addr_normalize(addr); + free(addr as *mut libc::c_void); + addr = temp; + if !dc_may_be_valid_addr(addr) { + (*qr_parsed).state = 400i32; + (*qr_parsed).text1 = + dc_strdup(b"Bad e-mail address.\x00" as *const u8 as *const libc::c_char); + return cleanup(); } + } - if !fingerprint.is_null() { - if strlen(fingerprint) != 40 { - (*qr_parsed).state = 400i32; - (*qr_parsed).text1 = dc_strdup( - b"Bad fingerprint length in QR code.\x00" as *const u8 as *const libc::c_char, + if !fingerprint.is_null() { + if strlen(fingerprint) != 40 { + (*qr_parsed).state = 400i32; + (*qr_parsed).text1 = dc_strdup( + b"Bad fingerprint length in QR code.\x00" as *const u8 as *const libc::c_char, + ); + return cleanup(); + } + } + + if !fingerprint.is_null() { + let peerstate = Peerstate::from_fingerprint(context, &context.sql, as_str(fingerprint)); + if addr.is_null() || invitenumber.is_null() || auth.is_null() { + if let Some(peerstate) = peerstate { + (*qr_parsed).state = 210i32; + let addr_ptr = if let Some(ref addr) = peerstate.addr { + to_cstring(addr) + } else { + std::ptr::null() + }; + (*qr_parsed).id = dc_add_or_lookup_contact( + context, + 0 as *const libc::c_char, + addr_ptr, + 0x80i32, + 0 as *mut libc::c_int, ); - return cleanup(); - } - } - - if !fingerprint.is_null() { - let peerstate = Peerstate::from_fingerprint(context, &context.sql, as_str(fingerprint)); - if addr.is_null() || invitenumber.is_null() || auth.is_null() { - if let Some(peerstate) = peerstate { - (*qr_parsed).state = 210i32; - let addr_ptr = if let Some(ref addr) = peerstate.addr { - to_cstring(addr) - } else { - std::ptr::null() - }; - (*qr_parsed).id = dc_add_or_lookup_contact( - context, - 0 as *const libc::c_char, - addr_ptr, - 0x80i32, - 0 as *mut libc::c_int, - ); - free(addr_ptr as *mut _); - dc_create_or_lookup_nchat_by_contact_id( - context, - (*qr_parsed).id, - 2i32, - &mut chat_id, - 0 as *mut libc::c_int, - ); - device_msg = dc_mprintf( - b"%s verified.\x00" as *const u8 as *const libc::c_char, - peerstate.addr, - ) - } else { - (*qr_parsed).text1 = dc_format_fingerprint_c(fingerprint); - (*qr_parsed).state = 230i32 - } + free(addr_ptr as *mut _); + dc_create_or_lookup_nchat_by_contact_id( + context, + (*qr_parsed).id, + 2i32, + &mut chat_id, + 0 as *mut libc::c_int, + ); + device_msg = dc_mprintf( + b"%s verified.\x00" as *const u8 as *const libc::c_char, + peerstate.addr, + ) } else { - if !grpid.is_null() && !grpname.is_null() { - (*qr_parsed).state = 202i32; - (*qr_parsed).text1 = dc_strdup(grpname); - (*qr_parsed).text2 = dc_strdup(grpid) - } else { - (*qr_parsed).state = 200i32 - } - (*qr_parsed).id = - dc_add_or_lookup_contact(context, name, addr, 0x80i32, 0 as *mut libc::c_int); - (*qr_parsed).fingerprint = dc_strdup(fingerprint); - (*qr_parsed).invitenumber = dc_strdup(invitenumber); - (*qr_parsed).auth = dc_strdup(auth) + (*qr_parsed).text1 = dc_format_fingerprint_c(fingerprint); + (*qr_parsed).state = 230i32 } - } else if !addr.is_null() { - (*qr_parsed).state = 320i32; - (*qr_parsed).id = - dc_add_or_lookup_contact(context, name, addr, 0x80i32, 0 as *mut libc::c_int) - } else if strstr(qr, b"http://\x00" as *const u8 as *const libc::c_char) - == qr as *mut libc::c_char - || strstr(qr, b"https://\x00" as *const u8 as *const libc::c_char) - == qr as *mut libc::c_char - { - (*qr_parsed).state = 332i32; - (*qr_parsed).text1 = dc_strdup(qr) } else { - (*qr_parsed).state = 330i32; - (*qr_parsed).text1 = dc_strdup(qr) - } - if !device_msg.is_null() { - dc_add_device_msg(context, chat_id, device_msg); + if !grpid.is_null() && !grpname.is_null() { + (*qr_parsed).state = 202i32; + (*qr_parsed).text1 = dc_strdup(grpname); + (*qr_parsed).text2 = dc_strdup(grpid) + } else { + (*qr_parsed).state = 200i32 + } + (*qr_parsed).id = + dc_add_or_lookup_contact(context, name, addr, 0x80i32, 0 as *mut libc::c_int); + (*qr_parsed).fingerprint = dc_strdup(fingerprint); + (*qr_parsed).invitenumber = dc_strdup(invitenumber); + (*qr_parsed).auth = dc_strdup(auth) } + } else if !addr.is_null() { + (*qr_parsed).state = 320i32; + (*qr_parsed).id = + dc_add_or_lookup_contact(context, name, addr, 0x80i32, 0 as *mut libc::c_int) + } else if strstr(qr, b"http://\x00" as *const u8 as *const libc::c_char) + == qr as *mut libc::c_char + || strstr(qr, b"https://\x00" as *const u8 as *const libc::c_char) + == qr as *mut libc::c_char + { + (*qr_parsed).state = 332i32; + (*qr_parsed).text1 = dc_strdup(qr) + } else { + (*qr_parsed).state = 330i32; + (*qr_parsed).text1 = dc_strdup(qr) + } + if !device_msg.is_null() { + dc_add_device_msg(context, chat_id, device_msg); + } cleanup() }