internal/errors: fix New in eliding prefix

Change-Id: I59c4c03f4115bfe6c4377924fadfd664245e878f
Reviewed-on: https://go-review.googlesource.com/c/164277
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/errors/errors.go b/internal/errors/errors.go
index 4fddf39..377d2ab 100644
--- a/internal/errors/errors.go
+++ b/internal/errors/errors.go
@@ -116,7 +116,7 @@
 // returns an error that has a "proto" prefix.
 func New(f string, x ...interface{}) error {
 	for i := 0; i < len(x); i++ {
-		if e, ok := x[i].(prefixError); ok {
+		if e, ok := x[i].(*prefixError); ok {
 			x[i] = e.s // avoid "proto: " prefix when chaining
 		}
 	}
diff --git a/internal/errors/errors_test.go b/internal/errors/errors_test.go
index 8dd635e..1d6464d 100644
--- a/internal/errors/errors_test.go
+++ b/internal/errors/errors_test.go
@@ -7,6 +7,7 @@
 import (
 	"errors"
 	"reflect"
+	"strings"
 	"testing"
 )
 
@@ -91,3 +92,24 @@
 
 func (customRequiredNotSetError) Error() string        { return "required field not set" }
 func (customRequiredNotSetError) RequiredNotSet() bool { return true }
+
+func TestNewPrefix(t *testing.T) {
+	e1 := New("abc")
+	got := e1.Error()
+	if !strings.HasPrefix(got, "proto:") {
+		t.Errorf("missing \"proto:\" prefix in %q", got)
+	}
+	if !strings.Contains(got, "abc") {
+		t.Errorf("missing text \"abc\" in %q", got)
+	}
+
+	e2 := New("%v", e1)
+	got = e2.Error()
+	if !strings.HasPrefix(got, "proto:") {
+		t.Errorf("missing \"proto:\" prefix in %q", got)
+	}
+	// Test to make sure prefix is removed from the embedded error.
+	if strings.Contains(strings.TrimPrefix(got, "proto:"), "proto:") {
+		t.Errorf("prefix \"proto:\" not elided in embedded error: %q", got)
+	}
+}