--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/golang/patches/0041-release-branch.go1.5-net-fix-off-by-one-error-while-.patch Thu Jan 21 09:20:59 2016 -0800
@@ -0,0 +1,110 @@
+From ecb9ce6a781717364697c298e1d4c13e93e1c949 Mon Sep 17 00:00:00 2001
+From: Alex Brainman <[email protected]>
+Date: Fri, 6 Nov 2015 17:29:27 +1100
+Subject: [PATCH 41/63] [release-branch.go1.5] net: fix off by one error while
+ counting interfaces on windows
+
+Fixes #12301
+
+Change-Id: I8d01ec9551c6cff7e6129e06a7deb36a3be9de41
+Reviewed-on: https://go-review.googlesource.com/16751
+Reviewed-by: Ian Lance Taylor <[email protected]>
+Run-TryBot: Ian Lance Taylor <[email protected]>
+TryBot-Result: Gobot Gobot <[email protected]>
+Reviewed-on: https://go-review.googlesource.com/16984
+Run-TryBot: Austin Clements <[email protected]>
+Reviewed-by: Alex Brainman <[email protected]>
+Reviewed-by: Russ Cox <[email protected]>
+---
+ src/net/interface_windows.go | 2 +-
+ src/net/net_windows_test.go | 53 ++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 54 insertions(+), 1 deletion(-)
+
+diff --git a/src/net/interface_windows.go b/src/net/interface_windows.go
+index e25c1ed..8cb9d76 100644
+--- a/src/net/interface_windows.go
++++ b/src/net/interface_windows.go
+@@ -48,7 +48,7 @@ func getInterfaceInfos() ([]syscall.InterfaceInfo, error) {
+ return nil, os.NewSyscallError("wsaioctl", err)
+ }
+ iilen := ret / uint32(unsafe.Sizeof(iia[0]))
+- return iia[:iilen-1], nil
++ return iia[:iilen], nil
+ }
+
+ func bytesEqualIP(a []byte, b []int8) bool {
+diff --git a/src/net/net_windows_test.go b/src/net/net_windows_test.go
+index da03e10..4f6bd45 100644
+--- a/src/net/net_windows_test.go
++++ b/src/net/net_windows_test.go
+@@ -6,10 +6,13 @@ package net
+
+ import (
+ "bufio"
++ "bytes"
+ "fmt"
+ "io"
+ "os"
+ "os/exec"
++ "sort"
++ "strings"
+ "syscall"
+ "testing"
+ "time"
+@@ -163,3 +166,53 @@ func TestAcceptIgnoreSomeErrors(t *testing.T) {
+ t.Fatalf(`"%s" received from recv, but "abc" expected`, s)
+ }
+ }
++
++func isWindowsXP(t *testing.T) bool {
++ v, err := syscall.GetVersion()
++ if err != nil {
++ t.Fatalf("GetVersion failed: %v", err)
++ }
++ major := byte(v)
++ return major < 6
++}
++
++func listInterfacesWithNetsh() ([]string, error) {
++ out, err := exec.Command("netsh", "interface", "ip", "show", "config").CombinedOutput()
++ if err != nil {
++ return nil, fmt.Errorf("netsh failed: %v: %q", err, string(out))
++ }
++ lines := bytes.Split(out, []byte{'\r', '\n'})
++ names := make([]string, 0)
++ for _, line := range lines {
++ f := bytes.Split(line, []byte{'"'})
++ if len(f) == 3 {
++ names = append(names, string(f[1]))
++ }
++ }
++ return names, nil
++}
++
++func TestInterfaceList(t *testing.T) {
++ if isWindowsXP(t) {
++ t.Skip("Windows XP netsh command does not provide required functionality")
++ }
++ ift, err := Interfaces()
++ if err != nil {
++ t.Fatal(err)
++ }
++ have := make([]string, 0)
++ for _, ifi := range ift {
++ have = append(have, ifi.Name)
++ }
++ sort.Strings(have)
++
++ want, err := listInterfacesWithNetsh()
++ if err != nil {
++ t.Fatal(err)
++ }
++ sort.Strings(want)
++
++ if strings.Join(want, "/") != strings.Join(have, "/") {
++ t.Fatalf("unexpected interface list %q, want %q", have, want)
++ }
++}
+--
+2.6.1
+