From 0fef8ff18178e33e9e1d26dc245312a3aa268d71 Mon Sep 17 00:00:00 2001 From: Mikkel Krautz Date: Fri, 14 Oct 2011 12:26:38 -0400 Subject: [PATCH] crypto/tls: fix broken looping code in windows root CA fetcher R=alex.brainman, hectorchu, rsc CC=golang-dev https://golang.org/cl/5263045 --- root_windows.go | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/root_windows.go b/root_windows.go index 9d64de4..b8e27a9 100644 --- a/root_windows.go +++ b/root_windows.go @@ -17,35 +17,31 @@ func loadStore(roots *x509.CertPool, name string) { return } - var prev *syscall.CertContext + var cert *syscall.CertContext for { - cur := syscall.CertEnumCertificatesInStore(store, prev) - if cur == nil { + cert = syscall.CertEnumCertificatesInStore(store, cert) + if cert == nil { break } - var buf []byte - hdrp := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) - hdrp.Data = cur.EncodedCert - hdrp.Len = int(cur.Length) - hdrp.Cap = int(cur.Length) + var asn1Slice []byte + hdrp := (*reflect.SliceHeader)(unsafe.Pointer(&asn1Slice)) + hdrp.Data = cert.EncodedCert + hdrp.Len = int(cert.Length) + hdrp.Cap = int(cert.Length) - cert, err := x509.ParseCertificate(buf) - if err != nil { - continue + buf := make([]byte, len(asn1Slice)) + copy(buf, asn1Slice) + + if cert, err := x509.ParseCertificate(buf); err == nil { + roots.AddCert(cert) } - - roots.AddCert(cert) - prev = cur } syscall.CertCloseStore(store, 0) } func initDefaultRoots() { - // TODO(brainman): To be fixed - return - roots := x509.NewCertPool() // Roots