blob: 4a0d5fb488d3a017433140ece252270dc9175888 [file] [log] [blame]
From 96382aa079b72d8c014eb0c50f6c223d1e6a2de0 Mon Sep 17 00:00:00 2001
From: Akihiro Suda <suda.kyoto@gmail.com>
Date: Tue, 13 Dec 2016 06:27:07 +0000
Subject: [PATCH] google: prefer os.Getenv("HOME") over os/user.Current() so as
to avoid SEGV
Due to an issue in handling thread-local storages, os/user can lead to SEGV
when glibc is statically linked with.
So we prefer os.Getenv("HOME") for guessing where is the home directory.
See also: golang/go#13470
Change-Id: I1046ff93a71aa3b11299f7e6cf65ff7b1fb07eb9
Reviewed-on: https://go-review.googlesource.com/34175
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
---
google/sdk.go | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/google/sdk.go b/google/sdk.go
index d29a3bb..bdc1808 100644
--- a/google/sdk.go
+++ b/google/sdk.go
@@ -160,9 +160,13 @@ var sdkConfigPath = func() (string, error) {
}
func guessUnixHomeDir() string {
- usr, err := user.Current()
- if err == nil {
- return usr.HomeDir
+ // Prefer $HOME over user.Current due to glibc bug: golang.org/issue/13470
+ if v := os.Getenv("HOME"); v != "" {
+ return v
}
- return os.Getenv("HOME")
+ // Else, fall back to user.Current:
+ if u, err := user.Current(); err == nil {
+ return u.HomeDir
+ }
+ return ""
}