]> Cypherpunks repositories - gostls13.git/commitdiff
crypto/x509: use unsafe.Slice
authorIan Lance Taylor <iant@golang.org>
Tue, 27 Sep 2022 16:38:17 +0000 (09:38 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 27 Sep 2022 22:00:10 +0000 (22:00 +0000)
Change-Id: I40fdfbd5cfb9f5ccb80d55bca28ff9ba1ec490f3
Reviewed-on: https://go-review.googlesource.com/c/go/+/435285
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/crypto/x509/internal/macos/corefoundation.go
src/crypto/x509/root_windows.go

index d1295daee1c99307520ec80b0e0d59dd9526786b..b27a9172e1a91516212a05ee232133d84a528145 100644 (file)
@@ -30,7 +30,7 @@ type CFRef uintptr
 func CFDataToSlice(data CFRef) []byte {
        length := CFDataGetLength(data)
        ptr := CFDataGetBytePtr(data)
-       src := (*[1 << 20]byte)(unsafe.Pointer(ptr))[:length:length]
+       src := unsafe.Slice((*byte)(unsafe.Pointer(ptr)), length)
        out := make([]byte, length)
        copy(out, src)
        return out
index d65d8768d9052885cfed1972f74b43d4649502e4..5515c439c78deb02679a122966a6ee88d4d71fef 100644 (file)
@@ -69,13 +69,13 @@ func extractSimpleChain(simpleChain **syscall.CertSimpleChain, count int) (chain
                return nil, errors.New("x509: invalid simple chain")
        }
 
-       simpleChains := (*[1 << 20]*syscall.CertSimpleChain)(unsafe.Pointer(simpleChain))[:count:count]
+       simpleChains := unsafe.Slice(simpleChain, count)
        lastChain := simpleChains[count-1]
-       elements := (*[1 << 20]*syscall.CertChainElement)(unsafe.Pointer(lastChain.Elements))[:lastChain.NumElements:lastChain.NumElements]
+       elements := unsafe.Slice(lastChain.Elements, lastChain.NumElements)
        for i := 0; i < int(lastChain.NumElements); i++ {
                // Copy the buf, since ParseCertificate does not create its own copy.
                cert := elements[i].CertContext
-               encodedCert := (*[1 << 20]byte)(unsafe.Pointer(cert.EncodedCert))[:cert.Length:cert.Length]
+               encodedCert := unsafe.Slice(cert.EncodedCert, cert.Length)
                buf := make([]byte, cert.Length)
                copy(buf, encodedCert)
                parsedCert, err := ParseCertificate(buf)
@@ -258,8 +258,7 @@ func (c *Certificate) systemVerify(opts *VerifyOptions) (chains [][]*Certificate
        }
 
        if lqCtxCount := topCtx.LowerQualityChainCount; lqCtxCount > 0 {
-               lqCtxs := (*[1 << 20]*syscall.CertChainContext)(unsafe.Pointer(topCtx.LowerQualityChains))[:lqCtxCount:lqCtxCount]
-
+               lqCtxs := unsafe.Slice(topCtx.LowerQualityChains, lqCtxCount)
                for _, ctx := range lqCtxs {
                        chain, err := verifyChain(c, ctx, opts)
                        if err == nil {