Config#LookupString uses git_buf to load value
diff --git a/config.go b/config.go
index 9d25e35..c4c4028 100644
--- a/config.go
+++ b/config.go
@@ -115,18 +115,20 @@
 }
 
 func (c *Config) LookupString(name string) (string, error) {
-	var ptr *C.char
 	cname := C.CString(name)
 	defer C.free(unsafe.Pointer(cname))
 
+	valBuf := C.git_buf{}
+
 	runtime.LockOSThread()
 	defer runtime.UnlockOSThread()
 
-	if ret := C.git_config_get_string(&ptr, c.ptr, cname); ret < 0 {
+	if ret := C.git_config_get_string_buf(&valBuf, c.ptr, cname); ret < 0 {
 		return "", MakeGitError(ret)
 	}
+	defer C.git_buf_free(&valBuf)
 
-	return C.GoString(ptr), nil
+	return C.GoString(valBuf.ptr), nil
 }
 
 func (c *Config) LookupBool(name string) (bool, error) {
diff --git a/config_test.go b/config_test.go
new file mode 100644
index 0000000..e4a2c1f
--- /dev/null
+++ b/config_test.go
@@ -0,0 +1,58 @@
+package git
+
+import (
+	"os"
+	"testing"
+)
+
+func setupConfig() (*Config, error) {
+	var (
+		c   *Config
+		err error
+		p   string
+	)
+
+	p, err = ConfigFindGlobal()
+	if err != nil {
+		return nil, err
+	}
+
+	c, err = OpenOndisk(nil, p)
+	if err != nil {
+		return nil, err
+	}
+
+	c.SetString("foo.bar", "baz")
+
+	return c, err
+}
+
+func cleanupConfig() {
+	os.Remove(tempConfig)
+}
+
+func TestConfigLookupString(t *testing.T) {
+	var (
+		err error
+		val string
+		c   *Config
+	)
+
+	c, err = setupConfig()
+	defer cleanupConfig()
+	if err != nil {
+		t.Errorf("Setup error: '%v'. Expected none\n", err)
+		t.FailNow()
+	}
+	defer c.Free()
+
+	val, err = c.LookupString("foo.bar")
+	if err != nil {
+		t.Errorf("Got error: '%v', expected none\n", err)
+		t.FailNow()
+	}
+
+	if val != "baz" {
+		t.Errorf("Got '%s', expected 'bar'\n", val)
+	}
+}