From 9e9ce4da5e012f12efe5e933d4d038ee32c2662e Mon Sep 17 00:00:00 2001 From: Leonid Bugaev Date: Thu, 2 May 2019 17:22:09 +0300 Subject: [PATCH] Re-vendor goautosocket Fixed panic during error handling: https://github.com/TykTechnologies/tyk/issues/2250 https://github.com/TykTechnologies/goautosocket --- main.go | 2 +- .../goautosocket/LICENSE | 0 .../goautosocket/README.md | 0 .../goautosocket/doc.go | 0 .../goautosocket/error.go | 0 .../goautosocket/tcp_client.go | 32 +++++++++++++------ vendor/vendor.json | 12 +++---- 7 files changed, 30 insertions(+), 16 deletions(-) rename vendor/github.com/{netbrain => TykTechnologies}/goautosocket/LICENSE (100%) rename vendor/github.com/{netbrain => TykTechnologies}/goautosocket/README.md (100%) rename vendor/github.com/{netbrain => TykTechnologies}/goautosocket/doc.go (100%) rename vendor/github.com/{netbrain => TykTechnologies}/goautosocket/error.go (100%) rename vendor/github.com/{netbrain => TykTechnologies}/goautosocket/tcp_client.go (91%) diff --git a/main.go b/main.go index 41da90a2dd7..36eb72d2569 100644 --- a/main.go +++ b/main.go @@ -34,12 +34,12 @@ import ( "github.com/gorilla/mux" "github.com/justinas/alice" "github.com/lonelycode/osin" - gas "github.com/netbrain/goautosocket" "github.com/rs/cors" uuid "github.com/satori/go.uuid" "rsc.io/letsencrypt" "github.com/TykTechnologies/goagain" + gas "github.com/TykTechnologies/goautosocket" "github.com/TykTechnologies/gorpc" "github.com/TykTechnologies/tyk/apidef" "github.com/TykTechnologies/tyk/certs" diff --git a/vendor/github.com/netbrain/goautosocket/LICENSE b/vendor/github.com/TykTechnologies/goautosocket/LICENSE similarity index 100% rename from vendor/github.com/netbrain/goautosocket/LICENSE rename to vendor/github.com/TykTechnologies/goautosocket/LICENSE diff --git a/vendor/github.com/netbrain/goautosocket/README.md b/vendor/github.com/TykTechnologies/goautosocket/README.md similarity index 100% rename from vendor/github.com/netbrain/goautosocket/README.md rename to vendor/github.com/TykTechnologies/goautosocket/README.md diff --git a/vendor/github.com/netbrain/goautosocket/doc.go b/vendor/github.com/TykTechnologies/goautosocket/doc.go similarity index 100% rename from vendor/github.com/netbrain/goautosocket/doc.go rename to vendor/github.com/TykTechnologies/goautosocket/doc.go diff --git a/vendor/github.com/netbrain/goautosocket/error.go b/vendor/github.com/TykTechnologies/goautosocket/error.go similarity index 100% rename from vendor/github.com/netbrain/goautosocket/error.go rename to vendor/github.com/TykTechnologies/goautosocket/error.go diff --git a/vendor/github.com/netbrain/goautosocket/tcp_client.go b/vendor/github.com/TykTechnologies/goautosocket/tcp_client.go similarity index 91% rename from vendor/github.com/netbrain/goautosocket/tcp_client.go rename to vendor/github.com/TykTechnologies/goautosocket/tcp_client.go index 66921da7f98..d4ad43b07a6 100644 --- a/vendor/github.com/netbrain/goautosocket/tcp_client.go +++ b/vendor/github.com/TykTechnologies/goautosocket/tcp_client.go @@ -7,6 +7,7 @@ package gas import ( "io" + "os" "net" "sync" "syscall" @@ -162,7 +163,7 @@ func (c *TCPClient) Read(b []byte) (int, error) { if err := c.reconnect(); err != nil { switch e := err.(type) { case *net.OpError: - if e.Err.(syscall.Errno) == syscall.ECONNREFUSED { + if errno(e.Err) == syscall.ECONNREFUSED { disconnected = true c.lock.RLock() continue @@ -182,8 +183,8 @@ func (c *TCPClient) Read(b []byte) (int, error) { } switch e := err.(type) { case *net.OpError: - if e.Err.(syscall.Errno) == syscall.ECONNRESET || - e.Err.(syscall.Errno) == syscall.EPIPE { + if errno(e.Err) == syscall.ECONNRESET || + errno(e.Err) == syscall.EPIPE { disconnected = true } else { return n, err @@ -219,7 +220,7 @@ func (c *TCPClient) ReadFrom(r io.Reader) (int64, error) { if err := c.reconnect(); err != nil { switch e := err.(type) { case *net.OpError: - if e.Err.(syscall.Errno) == syscall.ECONNREFUSED { + if errno(e.Err) == syscall.ECONNREFUSED { disconnected = true c.lock.RLock() continue @@ -239,8 +240,8 @@ func (c *TCPClient) ReadFrom(r io.Reader) (int64, error) { } switch e := err.(type) { case *net.OpError: - if e.Err.(syscall.Errno) == syscall.ECONNRESET || - e.Err.(syscall.Errno) == syscall.EPIPE { + if errno(e.Err) == syscall.ECONNRESET || + errno(e.Err) == syscall.EPIPE { disconnected = true } else { return n, err @@ -276,7 +277,7 @@ func (c *TCPClient) Write(b []byte) (int, error) { if err := c.reconnect(); err != nil { switch e := err.(type) { case *net.OpError: - if e.Err.(syscall.Errno) == syscall.ECONNREFUSED { + if errno(e.Err) == syscall.ECONNREFUSED { disconnected = true c.lock.RLock() continue @@ -296,8 +297,8 @@ func (c *TCPClient) Write(b []byte) (int, error) { } switch e := err.(type) { case *net.OpError: - if e.Err.(syscall.Errno) == syscall.ECONNRESET || - e.Err.(syscall.Errno) == syscall.EPIPE { + if errno(e.Err) == syscall.ECONNRESET || + errno(e.Err) == syscall.EPIPE { disconnected = true } else { return n, err @@ -309,3 +310,16 @@ func (c *TCPClient) Write(b []byte) (int, error) { return -1, ErrMaxRetries } + +func errno(err error) syscall.Errno { + switch v := err.(type) { + case syscall.Errno: + return v + case *os.SyscallError: + if errno, ok := v.Err.(syscall.Errno); ok { + return errno + } + } + + return syscall.Errno(0x0) +} diff --git a/vendor/vendor.json b/vendor/vendor.json index 10eca1928dd..c233be122fb 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -42,6 +42,12 @@ "revision": "e23361255278b7e2dcdfe6d1407191725340fa00", "revisionTime": "2017-11-17T14:56:08Z" }, + { + "checksumSHA1": "BpDucRvJ5e5NCVhxDr2ORjG7Srs=", + "path": "github.com/TykTechnologies/goautosocket", + "revision": "97bfa5e7e48185d76417daf6e2a334a0ccb24981", + "revisionTime": "2019-04-30T12:12:22Z" + }, { "checksumSHA1": "wFnSvPbjvlEIoonJPA2AUxJnpHk=", "path": "github.com/TykTechnologies/gojsonschema", @@ -398,12 +404,6 @@ "revision": "eecee6c969c02c8cc2ae48e1e269843ae8590796", "revisionTime": "2018-08-24T00:34:11Z" }, - { - "checksumSHA1": "GsU3DMfKXECkDJyjINXYr2Hj3Nc=", - "path": "github.com/netbrain/goautosocket", - "revision": "bef85f0aef40c230fa5451a1ca200919722e978a", - "revisionTime": "2015-06-24T14:57:46Z" - }, { "checksumSHA1": "fG/hdI57tzm9CfcELMa7QVXESR8=", "path": "github.com/newrelic/go-agent",