From 033ad6e5ef0e0a2b3d58389ef5a1b562b46dcc39 Mon Sep 17 00:00:00 2001 From: Vladimir Buzuev Date: Thu, 26 Mar 2020 14:43:43 -0700 Subject: [PATCH 1/2] fix SIGSERV on double free for Cred object --- remote.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/remote.go b/remote.go index c966aab..336388e 100644 --- a/remote.go +++ b/remote.go @@ -254,6 +254,8 @@ func credentialsCallback(_cred **C.git_cred, _url *C.char, _username_from_url *C return C.GIT_EUSER } if cred != nil { + // we are transferring ownership to libgit, have to disable + runtime.SetFinalizer(cred, nil) *_cred = cred.ptr } return 0 From 89dc80bbea1a418182d31fcdb34b0c2ebeaf7c16 Mon Sep 17 00:00:00 2001 From: Vladimir Buzuev Date: Thu, 26 Mar 2020 17:30:05 -0700 Subject: [PATCH 2/2] clear native cred pointer after transfer ownership to libgit --- remote.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/remote.go b/remote.go index 336388e..9d65d10 100644 --- a/remote.go +++ b/remote.go @@ -254,9 +254,11 @@ func credentialsCallback(_cred **C.git_cred, _url *C.char, _username_from_url *C return C.GIT_EUSER } if cred != nil { - // we are transferring ownership to libgit, have to disable - runtime.SetFinalizer(cred, nil) *_cred = cred.ptr + + // have transferred ownership to libgit, 'forget' the native pointer + cred.ptr = nil + runtime.SetFinalizer(cred, nil) } return 0 }