diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/remote.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/remote.c b/src/remote.c index c84911aa1..d516d07fb 100644 --- a/src/remote.c +++ b/src/remote.c @@ -985,10 +985,25 @@ void git_remote_check_cert(git_remote *remote, int check) remote->check_cert = check; } -void git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks) +static bool callbacks_have_valid_version(git_remote_callbacks *callbacks) +{ + if (!callbacks) + return true; + + if (callbacks->version > 0 && callbacks->version <= GIT_REMOTE_CALLBACKS_VERSION) + return true; + + giterr_set(GITERR_INVALID, "Invalid version %d for git_remote_callbacks", callbacks->version); + return false; +} + +int git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callbacks) { assert(remote && callbacks); + if (!callbacks_have_valid_version(callbacks)) + return -1; + memcpy(&remote->callbacks, callbacks, sizeof(git_remote_callbacks)); if (remote->transport && remote->transport->set_callbacks) @@ -996,6 +1011,8 @@ void git_remote_set_callbacks(git_remote *remote, git_remote_callbacks *callback remote->callbacks.progress, NULL, remote->callbacks.payload); + + return 0; } void git_remote_set_cred_acquire_cb( |