diff --git a/nacl/sign/sign_test.go b/nacl/sign/sign_test.go
index 0a6439a..db26901 100644
--- a/nacl/sign/sign_test.go
+++ b/nacl/sign/sign_test.go
@@ -40,7 +40,7 @@
 	if !bytes.Equal(message, testMessage) {
 		t.Fatalf("message did not match, got\n%x\n, expected\n%x", message, testMessage)
 	}
-	message, ok = Open(nil, testSignedMessage[1:], &testPublicKey)
+	_, ok = Open(nil, testSignedMessage[1:], &testPublicKey)
 	if ok {
 		t.Fatalf("invalid signed message successfully verified")
 	}
diff --git a/ocsp/ocsp.go b/ocsp/ocsp.go
index f079d9e..d297ac9 100644
--- a/ocsp/ocsp.go
+++ b/ocsp/ocsp.go
@@ -487,6 +487,9 @@
 	if err != nil {
 		return nil, err
 	}
+	if len(rest) > 0 {
+		return nil, ParseError("trailing data in OCSP response")
+	}
 
 	if n := len(basicResp.TBSResponseData.Responses); n == 0 || cert == nil && n > 1 {
 		return nil, ParseError("OCSP response contains bad number of responses")
diff --git a/openpgp/packet/opaque_test.go b/openpgp/packet/opaque_test.go
index f27bbfe..61159f4 100644
--- a/openpgp/packet/opaque_test.go
+++ b/openpgp/packet/opaque_test.go
@@ -32,7 +32,7 @@
 			break
 		}
 		// try to parse opaque packet
-		p, err := op.Parse()
+		p, _ := op.Parse()
 		switch pkt := p.(type) {
 		case *UserId:
 			uid = pkt
diff --git a/otr/otr.go b/otr/otr.go
index 173b753..1be103f 100644
--- a/otr/otr.go
+++ b/otr/otr.go
@@ -637,7 +637,7 @@
 }
 
 func (c *Conversation) processDHKey(in []byte) (isSame bool, err error) {
-	gy, in, ok := getMPI(in)
+	gy, _, ok := getMPI(in)
 	if !ok {
 		err = errors.New("otr: corrupt DH key message")
 		return
diff --git a/ssh/agent/client_test.go b/ssh/agent/client_test.go
index 2f798f9..2f8abf1 100644
--- a/ssh/agent/client_test.go
+++ b/ssh/agent/client_test.go
@@ -444,14 +444,14 @@
 func TestAgentExtensions(t *testing.T) {
 	agent, _, cleanup := startOpenSSHAgent(t)
 	defer cleanup()
-	result, err := agent.Extension("my-extension@example.com", []byte{0x00, 0x01, 0x02})
+	_, err := agent.Extension("my-extension@example.com", []byte{0x00, 0x01, 0x02})
 	if err == nil {
 		t.Fatal("should have gotten agent extension failure")
 	}
 
 	agent, cleanup = startAgent(t, &keyringExtended{})
 	defer cleanup()
-	result, err = agent.Extension("my-extension@example.com", []byte{0x00, 0x01, 0x02})
+	result, err := agent.Extension("my-extension@example.com", []byte{0x00, 0x01, 0x02})
 	if err != nil {
 		t.Fatalf("agent extension failure: %v", err)
 	}
@@ -459,7 +459,7 @@
 		t.Fatalf("agent extension result invalid: %v", result)
 	}
 
-	result, err = agent.Extension("bad-extension@example.com", []byte{0x00, 0x01, 0x02})
+	_, err = agent.Extension("bad-extension@example.com", []byte{0x00, 0x01, 0x02})
 	if err == nil {
 		t.Fatal("should have gotten agent extension failure")
 	}
diff --git a/ssh/benchmark_test.go b/ssh/benchmark_test.go
index 20c3307..a13235d 100644
--- a/ssh/benchmark_test.go
+++ b/ssh/benchmark_test.go
@@ -93,6 +93,9 @@
 			b.Fatalf("Client: %v", err)
 		}
 		ch, incoming, err := newCh.Accept()
+		if err != nil {
+			b.Fatalf("Accept: %v", err)
+		}
 		go DiscardRequests(incoming)
 		for i := 0; i < b.N; i++ {
 			if _, err := io.ReadFull(ch, output); err != nil {
