From 62a16395b17460887747602a4184372a0c9a6d6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Fri, 8 Mar 2013 16:03:49 +0100 Subject: [PATCH] Oid: make sure not to dereference a NULL git_oid Some calls like Reference.Target() can return NULL if the reference is symbolic. Make sure newOidFromC() can handle these situations. --- git.go | 4 ++++ reference_test.go | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/git.go b/git.go index 84716e3..68712d4 100644 --- a/git.go +++ b/git.go @@ -26,6 +26,10 @@ type Oid struct { } func newOidFromC(coid *C.git_oid) *Oid { + if coid == nil { + return nil + } + oid := new(Oid) copy(oid.bytes[0:20], C.GoBytes(unsafe.Pointer(coid), 20)) return oid diff --git a/reference_test.go b/reference_test.go index ba32d81..8043833 100644 --- a/reference_test.go +++ b/reference_test.go @@ -43,10 +43,22 @@ func TestRefModification(t *testing.T) { checkFatal(t, err) checkRefType(t, ref, SYMBOLIC) + if target := ref.Target(); target != nil { + t.Fatalf("Expected nil *Oid, got %v", target) + } + ref, err = ref.Resolve() checkFatal(t, err) checkRefType(t, ref, OID) + if target := ref.Target(); target == nil { + t.Fatalf("Expected valid target got nil") + } + + if target := ref.SymbolicTarget(); target != "" { + t.Fatalf("Expected empty string, got %v", target) + } + if commitId.String() != ref.Target().String() { t.Fatalf("Wrong ref target") } -- 2.45.2