From 615733d17090a31ef3418b6941c8b9cc4cabe258 Mon Sep 17 00:00:00 2001 From: Michael Gehring Date: Mon, 14 May 2012 12:26:29 -0400 Subject: [PATCH] crypto/tls: fix decoding of certLen in certificateMsg.unmarshal certLen was decoded incorrectly if length > 2^16-1. R=golang-dev, agl CC=golang-dev https://golang.org/cl/6197077 --- handshake_messages.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/handshake_messages.go b/handshake_messages.go index e1517cc..54c7a3e 100644 --- a/handshake_messages.go +++ b/handshake_messages.go @@ -563,7 +563,7 @@ func (m *certificateMsg) unmarshal(data []byte) bool { if len(d) < 4 { return false } - certLen := uint32(d[0])<<24 | uint32(d[1])<<8 | uint32(d[2]) + certLen := uint32(d[0])<<16 | uint32(d[1])<<8 | uint32(d[2]) if uint32(len(d)) < 3+certLen { return false } @@ -575,7 +575,7 @@ func (m *certificateMsg) unmarshal(data []byte) bool { m.certificates = make([][]byte, numCerts) d = data[7:] for i := 0; i < numCerts; i++ { - certLen := uint32(d[0])<<24 | uint32(d[1])<<8 | uint32(d[2]) + certLen := uint32(d[0])<<16 | uint32(d[1])<<8 | uint32(d[2]) m.certificates[i] = d[3 : 3+certLen] d = d[3+certLen:] }