Clean up static analysis warnings

Mostly but not entirely discarding error return values of things that
can not possibly fail despite the API returning errors.
merge-requests/3/head
Yawning Angel 5 years ago
parent a83ca3c9fe
commit 5b4397bff8

@ -139,7 +139,7 @@ func (drbg *HashDrbg) Seed(seed int64) {
// NextBlock returns the next 8 byte DRBG block.
func (drbg *HashDrbg) NextBlock() []byte {
drbg.sip.Write(drbg.ofb[:])
_, _ = drbg.sip.Write(drbg.ofb[:])
copy(drbg.ofb[:], drbg.sip.Sum(nil))
ret := make([]byte, Size)

@ -385,21 +385,21 @@ func ntorCommon(secretInput bytes.Buffer, id *NodeID, b *PublicKey, x *PublicKey
// KEY_SEED = H(secret_input, t_key)
h := hmac.New(sha256.New, tKey)
h.Write(secretInput.Bytes())
_, _ = h.Write(secretInput.Bytes())
tmp := h.Sum(nil)
copy(keySeed[:], tmp)
// verify = H(secret_input, t_verify)
h = hmac.New(sha256.New, tVerify)
h.Write(secretInput.Bytes())
_, _ = h.Write(secretInput.Bytes())
verify := h.Sum(nil)
// auth_input = verify | ID | B | Y | X | PROTOID | "Server"
authInput := bytes.NewBuffer(verify)
authInput.Write(suffix.Bytes())
authInput.Write([]byte("Server"))
_, _ = authInput.Write(suffix.Bytes())
_, _ = authInput.Write([]byte("Server"))
h = hmac.New(sha256.New, tMac)
h.Write(authInput.Bytes())
_, _ = h.Write(authInput.Bytes())
tmp = h.Sum(nil)
copy(auth[:], tmp)

@ -39,8 +39,8 @@ func (req *Request) authRFC1929() (err error) {
sendErrResp := func() {
// Swallow write/flush errors, the auth failure is the relevant error.
resp := []byte{authRFC1929Ver, authRFC1929Fail}
req.rw.Write(resp[:])
req.flushBuffers()
_, _ = req.rw.Write(resp[:])
_ = req.flushBuffers()
}
// The client sends a Username/Password request.

@ -257,15 +257,15 @@ func (req *Request) readCommand() error {
var err error
if err = req.readByteVerify("version", version); err != nil {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return err
}
if err = req.readByteVerify("command", cmdConnect); err != nil {
req.Reply(ReplyCommandNotSupported)
_ = req.Reply(ReplyCommandNotSupported)
return err
}
if err = req.readByteVerify("reserved", rsv); err != nil {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return err
}
@ -273,49 +273,49 @@ func (req *Request) readCommand() error {
var atyp byte
var host string
if atyp, err = req.readByte(); err != nil {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return err
}
switch atyp {
case atypIPv4:
var addr []byte
if addr, err = req.readBytes(net.IPv4len); err != nil {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return err
}
host = net.IPv4(addr[0], addr[1], addr[2], addr[3]).String()
case atypDomainName:
var alen byte
if alen, err = req.readByte(); err != nil {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return err
}
if alen == 0 {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return fmt.Errorf("domain name with 0 length")
}
var addr []byte
if addr, err = req.readBytes(int(alen)); err != nil {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return err
}
host = string(addr)
case atypIPv6:
var rawAddr []byte
if rawAddr, err = req.readBytes(net.IPv6len); err != nil {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return err
}
addr := make(net.IP, net.IPv6len)
copy(addr[:], rawAddr[:])
host = fmt.Sprintf("[%s]", addr.String())
default:
req.Reply(ReplyAddressNotSupported)
_ = req.Reply(ReplyAddressNotSupported)
return fmt.Errorf("unsupported address type 0x%02x", atyp)
}
var rawPort []byte
if rawPort, err = req.readBytes(2); err != nil {
req.Reply(ReplyGeneralFailure)
_ = req.Reply(ReplyGeneralFailure)
return err
}
port := int(rawPort[0])<<8 | int(rawPort[1])

@ -56,12 +56,16 @@ func (c *testReadWriter) Write(buf []byte) (n int, err error) {
return c.writeBuf.Write(buf)
}
func (c *testReadWriter) writeHex(str string) (n int, err error) {
func (c *testReadWriter) writeHex(str string) {
var buf []byte
var err error
if buf, err = hex.DecodeString(str); err != nil {
return
panic("writeHex: malformed hex: " + err.Error())
}
if _, err = c.readBuf.Write(buf); err != nil {
panic("writeHex: buffered write failed: " + err.Error())
}
return c.readBuf.Write(buf)
}
func (c *testReadWriter) readHex() string {

@ -75,23 +75,25 @@ func clientSetup() (launched bool, listeners []net.Listener) {
for _, name := range ptClientInfo.MethodNames {
t := transports.Get(name)
if t == nil {
pt.CmethodError(name, "no such transport is supported")
_ = pt.CmethodError(name, "no such transport is supported")
continue
}
f, err := t.ClientFactory(stateDir)
if err != nil {
pt.CmethodError(name, "failed to get ClientFactory")
_ = pt.CmethodError(name, "failed to get ClientFactory")
continue
}
ln, err := net.Listen("tcp", socksAddr)
if err != nil {
pt.CmethodError(name, err.Error())
_ = pt.CmethodError(name, err.Error())
continue
}
go clientAcceptLoop(f, ln, ptClientProxy)
go func() {
_ = clientAcceptLoop(f, ln, ptClientProxy)
}()
pt.Cmethod(name, socks5.Version(), ln.Addr())
log.Infof("%s - registered listener: %s", name, ln.Addr())
@ -137,7 +139,7 @@ func clientHandler(f base.ClientFactory, conn net.Conn, proxyURI *url.URL) {
args, err := f.ParseArgs(&socksReq.Args)
if err != nil {
log.Errorf("%s(%s) - invalid arguments: %s", name, addrStr, err)
socksReq.Reply(socks5.ReplyGeneralFailure)
_ = socksReq.Reply(socks5.ReplyGeneralFailure)
return
}
@ -149,7 +151,7 @@ func clientHandler(f base.ClientFactory, conn net.Conn, proxyURI *url.URL) {
// This should basically never happen, since config protocol
// verifies this.
log.Errorf("%s(%s) - failed to obtain proxy dialer: %s", name, addrStr, log.ElideError(err))
socksReq.Reply(socks5.ReplyGeneralFailure)
_ = socksReq.Reply(socks5.ReplyGeneralFailure)
return
}
dialFn = dialer.Dial
@ -157,7 +159,7 @@ func clientHandler(f base.ClientFactory, conn net.Conn, proxyURI *url.URL) {
remote, err := f.Dial("tcp", socksReq.Target, dialFn, args)
if err != nil {
log.Errorf("%s(%s) - outgoing connection failed: %s", name, addrStr, log.ElideError(err))
socksReq.Reply(socks5.ErrorToReplyCode(err))
_ = socksReq.Reply(socks5.ErrorToReplyCode(err))
return
}
defer remote.Close()
@ -172,8 +174,6 @@ func clientHandler(f base.ClientFactory, conn net.Conn, proxyURI *url.URL) {
} else {
log.Infof("%s(%s) - closed connection", name, addrStr)
}
return
}
func serverSetup() (launched bool, listeners []net.Listener) {
@ -186,23 +186,25 @@ func serverSetup() (launched bool, listeners []net.Listener) {
name := bindaddr.MethodName
t := transports.Get(name)
if t == nil {
pt.SmethodError(name, "no such transport is supported")
_ = pt.SmethodError(name, "no such transport is supported")
continue
}
f, err := t.ServerFactory(stateDir, &bindaddr.Options)
if err != nil {
pt.SmethodError(name, err.Error())
_ = pt.SmethodError(name, err.Error())
continue
}
ln, err := net.ListenTCP("tcp", bindaddr.Addr)
if err != nil {
pt.SmethodError(name, err.Error())
_ = pt.SmethodError(name, err.Error())
continue
}
go serverAcceptLoop(f, ln, &ptServerInfo)
go func() {
_ = serverAcceptLoop(f, ln, &ptServerInfo)
}()
if args := f.Args(); args != nil {
pt.SmethodArgs(name, ln.Addr(), *args)
} else {
@ -262,8 +264,6 @@ func serverHandler(f base.ServerFactory, conn net.Conn, info *pt.ServerInfo) {
} else {
log.Infof("%s(%s) - closed connection", name, addrStr)
}
return
}
func copyLoop(a net.Conn, b net.Conn) error {
@ -326,7 +326,7 @@ func main() {
// Determine if this is a client or server, initialize the common state.
var ptListeners []net.Listener
launched := false
var launched bool
isClient, err := ptIsClient()
if err != nil {
golog.Fatalf("[ERROR]: %s - must be run as a managed transport", execName)

@ -43,19 +43,19 @@ import (
func ptEnvError(msg string) error {
line := []byte(fmt.Sprintf("ENV-ERROR %s\n", msg))
pt.Stdout.Write(line)
_, _ = pt.Stdout.Write(line)
return errors.New(msg)
}
func ptProxyError(msg string) error {
line := []byte(fmt.Sprintf("PROXY-ERROR %s\n", msg))
pt.Stdout.Write(line)
_, _ = pt.Stdout.Write(line)
return errors.New(msg)
}
func ptProxyDone() {
line := []byte("PROXY DONE\n")
pt.Stdout.Write(line)
_, _ = pt.Stdout.Write(line)
}
func ptIsClient() (bool, error) {

@ -216,7 +216,7 @@ func (c *meekConn) SetWriteDeadline(t time.Time) error {
}
func (c *meekConn) enqueueWrite(b []byte) (ok bool) {
defer func() { recover() }()
defer func() { _ = recover() }()
c.workerWrChan <- b
return true
}
@ -273,7 +273,7 @@ loop:
// If the poll interval has elapsed, issue a request.
case sndBuf = <-c.workerWrChan:
// If there is data pending a send, issue a request.
case _ = <-c.workerCloseChan:
case <-c.workerCloseChan:
break loop
}

@ -362,9 +362,9 @@ func mac(s, x []byte) []byte {
// H(x) is SHA256 of x.
// MAC(s, x) = H(s | x | s)
h := sha256.New()
h.Write(s)
h.Write(x)
h.Write(s)
_, _ = h.Write(s)
_, _ = h.Write(x)
_, _ = h.Write(s)
return h.Sum(nil)
}

@ -235,17 +235,17 @@ func (conn *obfs3Conn) kdf(sharedSecret []byte) error {
// RESP_KEY = RESP_SECRET[:KEYLEN]
// RESP_COUNTER = RESP_SECRET[KEYLEN:]
initHmac := hmac.New(sha256.New, sharedSecret)
initHmac.Write([]byte(initiatorKdfString))
_, _ = initHmac.Write([]byte(initiatorKdfString))
initSecret := initHmac.Sum(nil)
initHmac.Reset()
initHmac.Write([]byte(initiatorMagicString))
_, _ = initHmac.Write([]byte(initiatorMagicString))
initMagic := initHmac.Sum(nil)
respHmac := hmac.New(sha256.New, sharedSecret)
respHmac.Write([]byte(responderKdfString))
_, _ = respHmac.Write([]byte(responderKdfString))
respSecret := respHmac.Sum(nil)
respHmac.Reset()
respHmac.Write([]byte(responderMagicString))
_, _ = respHmac.Write([]byte(responderMagicString))
respMagic := respHmac.Sum(nil)
// The INIT_KEY value keys a block cipher (in CTR mode) used to

@ -158,7 +158,7 @@ func BenchmarkEncoder_Encode(b *testing.B) {
b.Fatal("buffer.Read() failed:", err)
}
n, err = encoder.Encode(frame[:], chopBuf[:n])
n, _ = encoder.Encode(frame[:], chopBuf[:n])
transfered += n - FrameOverhead
}
if transfered != len(payload) {

@ -137,7 +137,7 @@ func (hs *clientHandshake) generateHandshake() ([]byte, error) {
var buf bytes.Buffer
hs.mac.Reset()
hs.mac.Write(hs.keypair.Representative().Bytes()[:])
_, _ = hs.mac.Write(hs.keypair.Representative().Bytes()[:])
mark := hs.mac.Sum(nil)[:markLength]
// The client handshake is X | P_C | M_C | MAC(X | P_C | M_C | E) where:
@ -161,9 +161,9 @@ func (hs *clientHandshake) generateHandshake() ([]byte, error) {
// Calculate and write the MAC.
hs.mac.Reset()
hs.mac.Write(buf.Bytes())
_, _ = hs.mac.Write(buf.Bytes())
hs.epochHour = []byte(strconv.FormatInt(getEpochHour(), 10))
hs.mac.Write(hs.epochHour)
_, _ = hs.mac.Write(hs.epochHour)
buf.Write(hs.mac.Sum(nil)[:macLength])
return buf.Bytes(), nil
@ -185,7 +185,7 @@ func (hs *clientHandshake) parseServerHandshake(resp []byte) (int, []byte, error
// Derive the mark.
hs.mac.Reset()
hs.mac.Write(hs.serverRepresentative.Bytes()[:])
_, _ = hs.mac.Write(hs.serverRepresentative.Bytes()[:])
hs.serverMark = hs.mac.Sum(nil)[:markLength]
}
@ -201,8 +201,8 @@ func (hs *clientHandshake) parseServerHandshake(resp []byte) (int, []byte, error
// Validate the MAC.
hs.mac.Reset()
hs.mac.Write(resp[:pos+markLength])
hs.mac.Write(hs.epochHour)
_, _ = hs.mac.Write(resp[:pos+markLength])
_, _ = hs.mac.Write(hs.epochHour)
macCmp := hs.mac.Sum(nil)[:macLength]
macRx := resp[pos+markLength : pos+markLength+macLength]
if !hmac.Equal(macCmp, macRx) {
@ -262,7 +262,7 @@ func (hs *serverHandshake) parseClientHandshake(filter *replayfilter.ReplayFilte
// Derive the mark.
hs.mac.Reset()
hs.mac.Write(hs.clientRepresentative.Bytes()[:])
_, _ = hs.mac.Write(hs.clientRepresentative.Bytes()[:])
hs.clientMark = hs.mac.Sum(nil)[:markLength]
}
@ -282,8 +282,8 @@ func (hs *serverHandshake) parseClientHandshake(filter *replayfilter.ReplayFilte
// Allow epoch to be off by up to a hour in either direction.
epochHour := []byte(strconv.FormatInt(getEpochHour()+int64(off), 10))
hs.mac.Reset()
hs.mac.Write(resp[:pos+markLength])
hs.mac.Write(epochHour)
_, _ = hs.mac.Write(resp[:pos+markLength])
_, _ = hs.mac.Write(epochHour)
macCmp := hs.mac.Sum(nil)[:macLength]
macRx := resp[pos+markLength : pos+markLength+macLength]
if hmac.Equal(macCmp, macRx) {
@ -329,7 +329,7 @@ func (hs *serverHandshake) generateHandshake() ([]byte, error) {
var buf bytes.Buffer
hs.mac.Reset()
hs.mac.Write(hs.keypair.Representative().Bytes()[:])
_, _ = hs.mac.Write(hs.keypair.Representative().Bytes()[:])
mark := hs.mac.Sum(nil)[:markLength]
// The server handshake is Y | AUTH | P_S | M_S | MAC(Y | AUTH | P_S | M_S | E) where:
@ -355,8 +355,8 @@ func (hs *serverHandshake) generateHandshake() ([]byte, error) {
// Calculate and write the MAC.
hs.mac.Reset()
hs.mac.Write(buf.Bytes())
hs.mac.Write(hs.epochHour) // Set in hs.parseClientHandshake()
_, _ = hs.mac.Write(buf.Bytes())
_, _ = hs.mac.Write(hs.epochHour) // Set in hs.parseClientHandshake()
buf.Write(hs.mac.Sum(nil)[:macLength])
return buf.Bytes(), nil

@ -245,7 +245,7 @@ func (conn *ssConn) makePacket(w io.Writer, pktType byte, data []byte, padLen in
// Encrypt the packet, and calculate the MAC.
conn.txCrypto.s.XORKeyStream(pkt, pkt)
conn.txCrypto.mac.Reset()
conn.txCrypto.mac.Write(pkt)
_, _ = conn.txCrypto.mac.Write(pkt)
mac := conn.txCrypto.mac.Sum(nil)[:macLength]
// Write out MAC | Packet. Note that this does not go onto the network
@ -273,7 +273,7 @@ func (conn *ssConn) readPackets() error {
break
}
mac := make([]byte, macLength)
conn.receiveBuffer.Read(mac)
_, _ = conn.receiveBuffer.Read(mac)
conn.receiveState.mac = mac
}
@ -283,12 +283,12 @@ func (conn *ssConn) readPackets() error {
break
}
hdr := make([]byte, pktHdrLength)
conn.receiveBuffer.Read(hdr)
_, _ = conn.receiveBuffer.Read(hdr)
// Add the encrypted packet header to the HMAC instance, and then
// decrypt it so that the length of the packet can be determined.
conn.rxCrypto.mac.Reset()
conn.rxCrypto.mac.Write(hdr)
_, _ = conn.rxCrypto.mac.Write(hdr)
conn.rxCrypto.s.XORKeyStream(hdr, hdr)
// Store the plaintext packet header, and host byte order length
@ -311,8 +311,8 @@ func (conn *ssConn) readPackets() error {
break
}
data = make([]byte, conn.receiveState.totalLen)
conn.receiveBuffer.Read(data)
conn.rxCrypto.mac.Write(data)
_, _ = conn.receiveBuffer.Read(data)
_, _ = conn.rxCrypto.mac.Write(data)
conn.rxCrypto.s.XORKeyStream(data, data)
}

@ -106,7 +106,7 @@ func (s *ssTicketStore) storeTicket(addr net.Addr, rawT []byte) {
// are ignored because the handshake code will just use UniformDH if a
// ticket is not available.
s.store[addr.String()] = t
s.serialize()
_ = s.serialize()
}
func (s *ssTicketStore) getTicket(addr net.Addr) (*ssTicket, error) {
@ -198,7 +198,7 @@ func (hs *ssTicketClientHandshake) generateHandshake() ([]byte, error) {
hs.mac.Reset()
// The client handshake is T | P | M | MAC(T | P | M | E)
hs.mac.Write(hs.ticket.ticket[:])
_, _ = hs.mac.Write(hs.ticket.ticket[:])
m := hs.mac.Sum(nil)[:macLength]
p, err := makePad(hs.padLen)
if err != nil {
@ -212,9 +212,9 @@ func (hs *ssTicketClientHandshake) generateHandshake() ([]byte, error) {
// Calculate and write the MAC.
e := []byte(strconv.FormatInt(getEpochHour(), 10))
hs.mac.Write(p)
hs.mac.Write(m)
hs.mac.Write(e)
_, _ = hs.mac.Write(p)
_, _ = hs.mac.Write(m)
_, _ = hs.mac.Write(e)
buf.Write(hs.mac.Sum(nil)[:macLength])
hs.mac.Reset()

@ -76,7 +76,7 @@ func (hs *ssDHClientHandshake) generateHandshake() ([]byte, error) {
if err != nil {
return nil, err
}
hs.mac.Write(x)
_, _ = hs.mac.Write(x)
mC := hs.mac.Sum(nil)[:macLength]
pC, err := makePad(hs.padLen)
if err != nil {
@ -90,9 +90,9 @@ func (hs *ssDHClientHandshake) generateHandshake() ([]byte, error) {
// Calculate and write the MAC.
hs.epochHour = []byte(strconv.FormatInt(getEpochHour(), 10))
hs.mac.Write(pC)
hs.mac.Write(mC)
hs.mac.Write(hs.epochHour)
_, _ = hs.mac.Write(pC)
_, _ = hs.mac.Write(mC)
_, _ = hs.mac.Write(hs.epochHour)
buf.Write(hs.mac.Sum(nil)[:macLength])
return buf.Bytes(), nil
@ -113,7 +113,7 @@ func (hs *ssDHClientHandshake) parseServerHandshake(resp []byte) (int, []byte, e
return 0, nil, err
}
hs.mac.Reset()
hs.mac.Write(y)
_, _ = hs.mac.Write(y)
hs.serverMark = hs.mac.Sum(nil)[:macLength]
}
@ -136,8 +136,8 @@ func (hs *ssDHClientHandshake) parseServerHandshake(resp []byte) (int, []byte, e
pos += uniformdh.Size
// Validate the MAC.
hs.mac.Write(resp[uniformdh.Size : pos+macLength])
hs.mac.Write(hs.epochHour)
_, _ = hs.mac.Write(resp[uniformdh.Size : pos+macLength])
_, _ = hs.mac.Write(hs.epochHour)
macCmp := hs.mac.Sum(nil)[:macLength]
macRx := resp[pos+macLength : pos+2*macLength]
if !hmac.Equal(macCmp, macRx) {

@ -50,9 +50,9 @@ func hkdfExpand(hashFn func() hash.Hash, prk []byte, info []byte, l int) []byte
ctr := byte(1)
for toAppend > 0 {
h.Reset()
h.Write(t)
h.Write(info)
h.Write([]byte{ctr})
_, _ = h.Write(t)
_, _ = h.Write(info)
_, _ = h.Write([]byte{ctr})
t = h.Sum(nil)
ctr++

@ -84,11 +84,17 @@ func Get(name string) base.Transport {
// Init initializes all of the integrated transports.
func Init() error {
Register(new(meeklite.Transport))
Register(new(obfs2.Transport))
Register(new(obfs3.Transport))
Register(new(obfs4.Transport))
Register(new(scramblesuit.Transport))
for _, v := range []base.Transport{
new(meeklite.Transport),
new(obfs2.Transport),
new(obfs3.Transport),
new(obfs4.Transport),
new(scramblesuit.Transport),
} {
if err := Register(v); err != nil {
return err
}
}
return nil
}

Loading…
Cancel
Save