crypto/tls: fix broken looping code in windows root CA fetcher

R=alex.brainman, hectorchu, rsc
CC=golang-dev
https://golang.org/cl/5263045
This commit is contained in:
Mikkel Krautz 2011-10-14 12:26:38 -04:00 committed by Russ Cox
parent 908d8ff498
commit 0fef8ff181

View File

@ -17,35 +17,31 @@ func loadStore(roots *x509.CertPool, name string) {
return return
} }
var prev *syscall.CertContext var cert *syscall.CertContext
for { for {
cur := syscall.CertEnumCertificatesInStore(store, prev) cert = syscall.CertEnumCertificatesInStore(store, cert)
if cur == nil { if cert == nil {
break break
} }
var buf []byte var asn1Slice []byte
hdrp := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) hdrp := (*reflect.SliceHeader)(unsafe.Pointer(&asn1Slice))
hdrp.Data = cur.EncodedCert hdrp.Data = cert.EncodedCert
hdrp.Len = int(cur.Length) hdrp.Len = int(cert.Length)
hdrp.Cap = int(cur.Length) hdrp.Cap = int(cert.Length)
cert, err := x509.ParseCertificate(buf) buf := make([]byte, len(asn1Slice))
if err != nil { copy(buf, asn1Slice)
continue
if cert, err := x509.ParseCertificate(buf); err == nil {
roots.AddCert(cert)
} }
roots.AddCert(cert)
prev = cur
} }
syscall.CertCloseStore(store, 0) syscall.CertCloseStore(store, 0)
} }
func initDefaultRoots() { func initDefaultRoots() {
// TODO(brainman): To be fixed
return
roots := x509.NewCertPool() roots := x509.NewCertPool()
// Roots // Roots