summaryrefslogtreecommitdiff
path: root/src/transports
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2018-11-06 13:10:30 +0000
committerEdward Thomson <ethomson@edwardthomson.com>2018-11-15 09:08:15 +0000
commit8ee1009874d11a61ccd4b89322432c3633b4cc1f (patch)
tree6dfb01fd91ab9cc180dbbbca5d0a543196b1c88c /src/transports
parent9189a66a9eb99f13ee81da5913ade3a1ff64262a (diff)
downloadlibgit2-8ee1009874d11a61ccd4b89322432c3633b4cc1f.tar.gz
transport: see if cert/cred callbacks exist before calling them
Custom transports may want to ask libgit2 to invoke a configured credential or certificate callback; however they likely do not know if a callback was actually configured. Return a sentinal value (GIT_PASSTHROUGH) if there is no callback configured instead of crashing.
Diffstat (limited to 'src/transports')
-rw-r--r--src/transports/smart.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/transports/smart.c b/src/transports/smart.c
index e972d30ba..9fcbdcf21 100644
--- a/src/transports/smart.c
+++ b/src/transports/smart.c
@@ -481,6 +481,11 @@ int git_transport_smart_certificate_check(git_transport *transport, git_cert *ce
{
transport_smart *t = (transport_smart *)transport;
+ assert(transport && cert && hostname);
+
+ if (!t->certificate_check_cb)
+ return GIT_PASSTHROUGH;
+
return t->certificate_check_cb(cert, valid, hostname, t->message_cb_payload);
}
@@ -488,6 +493,11 @@ int git_transport_smart_credentials(git_cred **out, git_transport *transport, co
{
transport_smart *t = (transport_smart *)transport;
+ assert(out && transport);
+
+ if (!t->cred_acquire_cb)
+ return GIT_PASSTHROUGH;
+
return t->cred_acquire_cb(out, t->url, user, methods, t->cred_acquire_payload);
}