From 659e318aedf3de9c7be5ce2bf40c8aa850194792 Mon Sep 17 00:00:00 2001 From: Bryson Steck Date: Thu, 20 Mar 2025 21:19:55 -0600 Subject: [PATCH 1/3] implement valid in certificate_check_cb --- src/remote_callbacks.rs | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/remote_callbacks.rs b/src/remote_callbacks.rs index 2df2e7b015..a6c6efad77 100644 --- a/src/remote_callbacks.rs +++ b/src/remote_callbacks.rs @@ -412,27 +412,32 @@ extern "C" fn update_tips_cb( extern "C" fn certificate_check_cb( cert: *mut raw::git_cert, - _valid: c_int, + valid: c_int, hostname: *const c_char, data: *mut c_void, ) -> c_int { - let ok = panic::wrap(|| unsafe { - let payload = &mut *(data as *mut RemoteCallbacks<'_>); - let callback = match payload.certificate_check { - Some(ref mut c) => c, - None => return Ok(CertificateCheckStatus::CertificatePassthrough), - }; - let cert = Binding::from_raw(cert); - let hostname = str::from_utf8(CStr::from_ptr(hostname).to_bytes()).unwrap(); - callback(&cert, hostname) - }); - match ok { - Some(Ok(CertificateCheckStatus::CertificateOk)) => 0, - Some(Ok(CertificateCheckStatus::CertificatePassthrough)) => raw::GIT_PASSTHROUGH as c_int, - Some(Err(e)) => unsafe { e.raw_set_git_error() }, - None => { - // Panic. The *should* get resumed by some future call to check(). - -1 + match valid { + -1 => valid, + _ => { + let ok = panic::wrap(|| unsafe { + let payload = &mut *(data as *mut RemoteCallbacks<'_>); + let callback = match payload.certificate_check { + Some(ref mut c) => c, + None => return Ok(CertificateCheckStatus::CertificatePassthrough), + }; + let cert = Binding::from_raw(cert); + let hostname = str::from_utf8(CStr::from_ptr(hostname).to_bytes()).unwrap(); + callback(&cert, hostname) + }); + match ok { + Some(Ok(CertificateCheckStatus::CertificateOk)) => 0, + Some(Ok(CertificateCheckStatus::CertificatePassthrough)) => raw::GIT_PASSTHROUGH as c_int, + Some(Err(e)) => unsafe { e.raw_set_git_error() }, + None => { + // Panic. The *should* get resumed by some future call to check(). + -1 + } + } } } } From d72e13b493bf58593e19e6d20e694805cfa187c9 Mon Sep 17 00:00:00 2001 From: Bryson Steck Date: Thu, 20 Mar 2025 21:31:08 -0600 Subject: [PATCH 2/3] whoops, actually a positive 1 --- src/remote_callbacks.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/remote_callbacks.rs b/src/remote_callbacks.rs index a6c6efad77..48579c141d 100644 --- a/src/remote_callbacks.rs +++ b/src/remote_callbacks.rs @@ -417,7 +417,7 @@ extern "C" fn certificate_check_cb( data: *mut c_void, ) -> c_int { match valid { - -1 => valid, + 1 => valid, _ => { let ok = panic::wrap(|| unsafe { let payload = &mut *(data as *mut RemoteCallbacks<'_>); From 1ca81270e632ac30c6e1367d3032ca3043068b2f Mon Sep 17 00:00:00 2001 From: Bryson Steck Date: Thu, 20 Mar 2025 21:57:12 -0600 Subject: [PATCH 3/3] satisfy formatting --- src/remote_callbacks.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/remote_callbacks.rs b/src/remote_callbacks.rs index 48579c141d..ad271352f6 100644 --- a/src/remote_callbacks.rs +++ b/src/remote_callbacks.rs @@ -431,7 +431,9 @@ extern "C" fn certificate_check_cb( }); match ok { Some(Ok(CertificateCheckStatus::CertificateOk)) => 0, - Some(Ok(CertificateCheckStatus::CertificatePassthrough)) => raw::GIT_PASSTHROUGH as c_int, + Some(Ok(CertificateCheckStatus::CertificatePassthrough)) => { + raw::GIT_PASSTHROUGH as c_int + } Some(Err(e)) => unsafe { e.raw_set_git_error() }, None => { // Panic. The *should* get resumed by some future call to check().