@ttsc/linux-arm 0.8.0-dev.20260506 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/go/VERSION +2 -2
- package/bin/go/bin/go +0 -0
- package/bin/go/bin/gofmt +0 -0
- package/bin/go/pkg/tool/linux_arm/asm +0 -0
- package/bin/go/pkg/tool/linux_arm/cgo +0 -0
- package/bin/go/pkg/tool/linux_arm/compile +0 -0
- package/bin/go/pkg/tool/linux_arm/cover +0 -0
- package/bin/go/pkg/tool/linux_arm/fix +0 -0
- package/bin/go/pkg/tool/linux_arm/link +0 -0
- package/bin/go/pkg/tool/linux_arm/preprofile +0 -0
- package/bin/go/pkg/tool/linux_arm/vet +0 -0
- package/bin/go/src/archive/tar/format.go +0 -6
- package/bin/go/src/archive/tar/reader.go +4 -24
- package/bin/go/src/builtin/builtin.go +4 -13
- package/bin/go/src/crypto/tls/conn.go +3 -7
- package/bin/go/src/crypto/tls/handshake_client_tls13.go +2 -2
- package/bin/go/src/crypto/tls/handshake_server_tls13.go +2 -2
- package/bin/go/src/crypto/x509/constraints.go +33 -33
- package/bin/go/src/crypto/x509/verify.go +13 -28
- package/bin/go/src/html/template/attr_string.go +2 -3
- package/bin/go/src/html/template/context.go +1 -21
- package/bin/go/src/html/template/element_string.go +2 -3
- package/bin/go/src/html/template/escape.go +2 -16
- package/bin/go/src/html/template/state_string.go +3 -5
- package/bin/go/src/html/template/transition.go +6 -41
- package/bin/go/src/internal/buildcfg/zbootstrap.go +1 -1
- package/bin/go/src/internal/godebugs/table.go +0 -1
- package/bin/go/src/internal/poll/fd_windows.go +38 -64
- package/bin/go/src/internal/poll/sendfile_windows.go +1 -3
- package/bin/go/src/internal/syscall/unix/at.go +17 -0
- package/bin/go/src/internal/syscall/unix/at_sysnum_linux.go +1 -2
- package/bin/go/src/internal/syscall/windows/at_windows.go +3 -20
- package/bin/go/src/internal/syscall/windows/syscall_windows.go +0 -4
- package/bin/go/src/internal/syscall/windows/types_windows.go +0 -82
- package/bin/go/src/internal/syscall/windows/zsyscall_windows.go +0 -27
- package/bin/go/src/net/http/doc.go +1 -0
- package/bin/go/src/net/sendfile.go +0 -2
- package/bin/go/src/net/sendfile_stub.go +0 -2
- package/bin/go/src/net/sendfile_windows.go +0 -3
- package/bin/go/src/net/url/url.go +16 -21
- package/bin/go/src/os/dir_darwin.go +2 -2
- package/bin/go/src/os/dir_unix.go +2 -2
- package/bin/go/src/os/file.go +3 -0
- package/bin/go/src/os/file_unix.go +5 -9
- package/bin/go/src/os/root_unix.go +0 -1
- package/bin/go/src/os/stat.go +0 -3
- package/bin/go/src/reflect/value.go +2 -3
- package/bin/go/src/runtime/defs_linux_mips64x.go +1 -1
- package/bin/go/src/runtime/defs_linux_mipsx.go +1 -1
- package/bin/go/src/runtime/metrics/doc.go +0 -5
- package/bin/go/src/runtime/print.go +4 -16
- package/bin/go/src/runtime/race/README +9 -9
- package/bin/go/src/runtime/race/internal/amd64v1/race_darwin.syso +0 -0
- package/bin/go/src/runtime/race/internal/amd64v1/race_freebsd.syso +0 -0
- package/bin/go/src/runtime/race/internal/amd64v1/race_linux.syso +0 -0
- package/bin/go/src/runtime/race/internal/amd64v1/race_windows.syso +0 -0
- package/bin/go/src/runtime/race/internal/amd64v3/race_linux.syso +0 -0
- package/bin/go/src/runtime/race/race_darwin_arm64.syso +0 -0
- package/bin/go/src/runtime/race/race_linux_arm64.syso +0 -0
- package/bin/go/src/runtime/race/race_linux_loong64.syso +0 -0
- package/bin/go/src/runtime/race/race_linux_s390x.syso +0 -0
- package/bin/ttsc +0 -0
- package/package.json +1 -1
- package/bin/go/src/internal/poll/fstatat_unix.go +0 -22
- package/bin/go/src/internal/syscall/unix/fchmodat_linux.go +0 -51
- package/bin/go/src/internal/syscall/unix/fchmodat_other.go +0 -29
- package/bin/go/src/os/statat.go +0 -24
- package/bin/go/src/os/statat_other.go +0 -12
- package/bin/go/src/os/statat_unix.go +0 -20
- package/bin/go/src/runtime/race/internal/amd64v1/race_darwin.patch +0 -63
- package/bin/go/src/runtime/race/internal/amd64v1/race_freebsd.patch +0 -63
- package/bin/go/src/runtime/race/internal/amd64v1/race_linux.patch +0 -63
- package/bin/go/src/runtime/race/internal/amd64v1/race_windows.patch +0 -63
- package/bin/go/src/runtime/race/internal/amd64v3/race_linux.patch +0 -63
- package/bin/go/src/runtime/race/race_darwin_arm64.patch +0 -63
- package/bin/go/src/runtime/race/race_linux_arm64.patch +0 -63
- package/bin/go/src/runtime/race/race_linux_loong64.patch +0 -63
- package/bin/go/src/runtime/race/race_linux_s390x.patch +0 -63
package/bin/go/VERSION
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
go1.26.
|
|
2
|
-
time 2026-
|
|
1
|
+
go1.26.0
|
|
2
|
+
time 2026-02-10T01:22:00Z
|
package/bin/go/bin/go
CHANGED
|
Binary file
|
package/bin/go/bin/gofmt
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -147,12 +147,6 @@ const (
|
|
|
147
147
|
// Max length of a special file (PAX header, GNU long name or link).
|
|
148
148
|
// This matches the limit used by libarchive.
|
|
149
149
|
maxSpecialFileSize = 1 << 20
|
|
150
|
-
|
|
151
|
-
// Maximum number of sparse file entries.
|
|
152
|
-
// We should never actually hit this limit
|
|
153
|
-
// (every sparse encoding will first be limited by maxSpecialFileSize),
|
|
154
|
-
// but this adds an additional layer of defense.
|
|
155
|
-
maxSparseFileEntries = 1 << 20
|
|
156
150
|
)
|
|
157
151
|
|
|
158
152
|
// blockPadding computes the number of bytes needed to pad offset up to the
|
|
@@ -490,8 +490,7 @@ func (tr *Reader) readOldGNUSparseMap(hdr *Header, blk *block) (sparseDatas, err
|
|
|
490
490
|
}
|
|
491
491
|
s := blk.toGNU().sparse()
|
|
492
492
|
spd := make(sparseDatas, 0, s.maxEntries())
|
|
493
|
-
|
|
494
|
-
for totalSize < maxSpecialFileSize {
|
|
493
|
+
for {
|
|
495
494
|
for i := 0; i < s.maxEntries(); i++ {
|
|
496
495
|
// This termination condition is identical to GNU and BSD tar.
|
|
497
496
|
if s.entry(i).offset()[0] == 0x00 {
|
|
@@ -502,11 +501,7 @@ func (tr *Reader) readOldGNUSparseMap(hdr *Header, blk *block) (sparseDatas, err
|
|
|
502
501
|
if p.err != nil {
|
|
503
502
|
return nil, p.err
|
|
504
503
|
}
|
|
505
|
-
|
|
506
|
-
spd, err = appendSparseEntry(spd, sparseEntry{Offset: offset, Length: length})
|
|
507
|
-
if err != nil {
|
|
508
|
-
return nil, err
|
|
509
|
-
}
|
|
504
|
+
spd = append(spd, sparseEntry{Offset: offset, Length: length})
|
|
510
505
|
}
|
|
511
506
|
|
|
512
507
|
if s.isExtended()[0] > 0 {
|
|
@@ -515,12 +510,10 @@ func (tr *Reader) readOldGNUSparseMap(hdr *Header, blk *block) (sparseDatas, err
|
|
|
515
510
|
return nil, err
|
|
516
511
|
}
|
|
517
512
|
s = blk.toSparse()
|
|
518
|
-
totalSize += len(s)
|
|
519
513
|
continue
|
|
520
514
|
}
|
|
521
515
|
return spd, nil // Done
|
|
522
516
|
}
|
|
523
|
-
return nil, errSparseTooLong
|
|
524
517
|
}
|
|
525
518
|
|
|
526
519
|
// readGNUSparseMap1x0 reads the sparse map as stored in GNU's PAX sparse format
|
|
@@ -593,10 +586,7 @@ func readGNUSparseMap1x0(r io.Reader) (sparseDatas, error) {
|
|
|
593
586
|
if err1 != nil || err2 != nil {
|
|
594
587
|
return nil, ErrHeader
|
|
595
588
|
}
|
|
596
|
-
spd
|
|
597
|
-
if err != nil {
|
|
598
|
-
return nil, err
|
|
599
|
-
}
|
|
589
|
+
spd = append(spd, sparseEntry{Offset: offset, Length: length})
|
|
600
590
|
}
|
|
601
591
|
return spd, nil
|
|
602
592
|
}
|
|
@@ -630,22 +620,12 @@ func readGNUSparseMap0x1(paxHdrs map[string]string) (sparseDatas, error) {
|
|
|
630
620
|
if err1 != nil || err2 != nil {
|
|
631
621
|
return nil, ErrHeader
|
|
632
622
|
}
|
|
633
|
-
spd
|
|
634
|
-
if err != nil {
|
|
635
|
-
return nil, err
|
|
636
|
-
}
|
|
623
|
+
spd = append(spd, sparseEntry{Offset: offset, Length: length})
|
|
637
624
|
sparseMap = sparseMap[2:]
|
|
638
625
|
}
|
|
639
626
|
return spd, nil
|
|
640
627
|
}
|
|
641
628
|
|
|
642
|
-
func appendSparseEntry(spd sparseDatas, ent sparseEntry) (sparseDatas, error) {
|
|
643
|
-
if len(spd) >= maxSparseFileEntries {
|
|
644
|
-
return nil, errSparseTooLong
|
|
645
|
-
}
|
|
646
|
-
return append(spd, ent), nil
|
|
647
|
-
}
|
|
648
|
-
|
|
649
629
|
// Read reads from the current file in the tar archive.
|
|
650
630
|
// It returns (0, io.EOF) when it reaches the end of that file,
|
|
651
631
|
// until [Next] is called to advance to the next file.
|
|
@@ -122,10 +122,6 @@ type Type int
|
|
|
122
122
|
// invocation.
|
|
123
123
|
type Type1 int
|
|
124
124
|
|
|
125
|
-
// TypeOrExpr is here for the purposes of documentation only. It is a stand-in
|
|
126
|
-
// for either a Go type or an expression.
|
|
127
|
-
type TypeOrExpr int
|
|
128
|
-
|
|
129
125
|
// IntegerType is here for the purposes of documentation only. It is a stand-in
|
|
130
126
|
// for any integer type: int, uint, int8 etc.
|
|
131
127
|
type IntegerType int
|
|
@@ -224,15 +220,10 @@ func max[T cmp.Ordered](x T, y ...T) T
|
|
|
224
220
|
// min will return NaN.
|
|
225
221
|
func min[T cmp.Ordered](x T, y ...T) T
|
|
226
222
|
|
|
227
|
-
// The built-in function
|
|
228
|
-
// a
|
|
229
|
-
//
|
|
230
|
-
|
|
231
|
-
// initialized to its zero value.
|
|
232
|
-
// Otherwise, the argument is an expression x and new(x) allocates a variable
|
|
233
|
-
// of the type of x initialized to the value of x. If that value is an untyped
|
|
234
|
-
// constant, it is first implicitly converted to its default type.
|
|
235
|
-
func new(TypeOrExpr) *Type
|
|
223
|
+
// The new built-in function allocates memory. The first argument is a type,
|
|
224
|
+
// not a value, and the value returned is a pointer to a newly
|
|
225
|
+
// allocated zero value of that type.
|
|
226
|
+
func new(Type) *Type
|
|
236
227
|
|
|
237
228
|
// The complex built-in function constructs a complex value from two
|
|
238
229
|
// floating-point values. The real and imaginary parts must be of the same
|
|
@@ -1363,7 +1363,7 @@ func (c *Conn) handleKeyUpdate(keyUpdate *keyUpdateMsg) error {
|
|
|
1363
1363
|
}
|
|
1364
1364
|
|
|
1365
1365
|
newSecret := cipherSuite.nextTrafficSecret(c.in.trafficSecret)
|
|
1366
|
-
if err := c.setReadTrafficSecret(cipherSuite, QUICEncryptionLevelInitial, newSecret
|
|
1366
|
+
if err := c.setReadTrafficSecret(cipherSuite, QUICEncryptionLevelInitial, newSecret); err != nil {
|
|
1367
1367
|
return err
|
|
1368
1368
|
}
|
|
1369
1369
|
|
|
@@ -1683,16 +1683,12 @@ func (c *Conn) VerifyHostname(host string) error {
|
|
|
1683
1683
|
// setReadTrafficSecret sets the read traffic secret for the given encryption level. If
|
|
1684
1684
|
// being called at the same time as setWriteTrafficSecret, the caller must ensure the call
|
|
1685
1685
|
// to setWriteTrafficSecret happens first so any alerts are sent at the write level.
|
|
1686
|
-
func (c *Conn) setReadTrafficSecret(suite *cipherSuiteTLS13, level QUICEncryptionLevel, secret []byte
|
|
1686
|
+
func (c *Conn) setReadTrafficSecret(suite *cipherSuiteTLS13, level QUICEncryptionLevel, secret []byte) error {
|
|
1687
1687
|
// Ensure that there are no buffered handshake messages before changing the
|
|
1688
1688
|
// read keys, since that can cause messages to be parsed that were encrypted
|
|
1689
1689
|
// using old keys which are no longer appropriate.
|
|
1690
1690
|
if c.hand.Len() != 0 {
|
|
1691
|
-
|
|
1692
|
-
c.sendAlertLocked(alertUnexpectedMessage)
|
|
1693
|
-
} else {
|
|
1694
|
-
c.sendAlert(alertUnexpectedMessage)
|
|
1695
|
-
}
|
|
1691
|
+
c.sendAlert(alertUnexpectedMessage)
|
|
1696
1692
|
return errors.New("tls: handshake buffer not empty before setting read traffic secret")
|
|
1697
1693
|
}
|
|
1698
1694
|
c.in.setTrafficSecret(suite, level, secret)
|
|
@@ -492,7 +492,7 @@ func (hs *clientHandshakeStateTLS13) establishHandshakeKeys() error {
|
|
|
492
492
|
clientSecret := handshakeSecret.ClientHandshakeTrafficSecret(hs.transcript)
|
|
493
493
|
c.setWriteTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, clientSecret)
|
|
494
494
|
serverSecret := handshakeSecret.ServerHandshakeTrafficSecret(hs.transcript)
|
|
495
|
-
if err := c.setReadTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, serverSecret
|
|
495
|
+
if err := c.setReadTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, serverSecret); err != nil {
|
|
496
496
|
return err
|
|
497
497
|
}
|
|
498
498
|
|
|
@@ -711,7 +711,7 @@ func (hs *clientHandshakeStateTLS13) readServerFinished() error {
|
|
|
711
711
|
|
|
712
712
|
hs.trafficSecret = hs.masterSecret.ClientApplicationTrafficSecret(hs.transcript)
|
|
713
713
|
serverSecret := hs.masterSecret.ServerApplicationTrafficSecret(hs.transcript)
|
|
714
|
-
if err := c.setReadTrafficSecret(hs.suite, QUICEncryptionLevelApplication, serverSecret
|
|
714
|
+
if err := c.setReadTrafficSecret(hs.suite, QUICEncryptionLevelApplication, serverSecret); err != nil {
|
|
715
715
|
return err
|
|
716
716
|
}
|
|
717
717
|
|
|
@@ -752,7 +752,7 @@ func (hs *serverHandshakeStateTLS13) sendServerParameters() error {
|
|
|
752
752
|
serverSecret := hs.handshakeSecret.ServerHandshakeTrafficSecret(hs.transcript)
|
|
753
753
|
c.setWriteTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, serverSecret)
|
|
754
754
|
clientSecret := hs.handshakeSecret.ClientHandshakeTrafficSecret(hs.transcript)
|
|
755
|
-
if err := c.setReadTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, clientSecret
|
|
755
|
+
if err := c.setReadTrafficSecret(hs.suite, QUICEncryptionLevelHandshake, clientSecret); err != nil {
|
|
756
756
|
return err
|
|
757
757
|
}
|
|
758
758
|
|
|
@@ -1136,7 +1136,7 @@ func (hs *serverHandshakeStateTLS13) readClientFinished() error {
|
|
|
1136
1136
|
return errors.New("tls: invalid client finished hash")
|
|
1137
1137
|
}
|
|
1138
1138
|
|
|
1139
|
-
if err := c.setReadTrafficSecret(hs.suite, QUICEncryptionLevelApplication, hs.trafficSecret
|
|
1139
|
+
if err := c.setReadTrafficSecret(hs.suite, QUICEncryptionLevelApplication, hs.trafficSecret); err != nil {
|
|
1140
1140
|
return err
|
|
1141
1141
|
}
|
|
1142
1142
|
|
|
@@ -58,11 +58,11 @@ import (
|
|
|
58
58
|
// of nameConstraintsSet, to handle constraints which define full email
|
|
59
59
|
// addresses (i.e. 'test@example.com'). For bare domain constraints, we use the
|
|
60
60
|
// dnsConstraints type described above, querying the domain portion of the email
|
|
61
|
-
// address. For full email addresses, we also hold a map of email addresses
|
|
62
|
-
// the
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
61
|
+
// address. For full email addresses, we also hold a map of email addresses that
|
|
62
|
+
// map the local portion of the email to the domain. When querying full email
|
|
63
|
+
// addresses we then check if the local portion of the email is present in the
|
|
64
|
+
// map, and if so case insensitively compare the domain portion of the
|
|
65
|
+
// email.
|
|
66
66
|
|
|
67
67
|
type nameConstraintsSet[T *net.IPNet | string, V net.IP | string] struct {
|
|
68
68
|
set []T
|
|
@@ -351,7 +351,6 @@ func newDNSConstraints(l []string, permitted bool) interface{ query(string) (str
|
|
|
351
351
|
if !permitted {
|
|
352
352
|
parentConstraints := map[string]string{}
|
|
353
353
|
for _, name := range nc.constraints.set {
|
|
354
|
-
name = strings.ToLower(name)
|
|
355
354
|
trimmedName := trimFirstLabel(name)
|
|
356
355
|
if trimmedName == "" {
|
|
357
356
|
continue
|
|
@@ -376,8 +375,7 @@ func (dnc *dnsConstraints) query(s string) (string, bool) {
|
|
|
376
375
|
return constraint, true
|
|
377
376
|
}
|
|
378
377
|
|
|
379
|
-
if !dnc.permitted &&
|
|
380
|
-
s = strings.ToLower(s)
|
|
378
|
+
if !dnc.permitted && s[0] == '*' {
|
|
381
379
|
trimmed := trimFirstLabel(s)
|
|
382
380
|
if constraint, found := dnc.parentConstraints[trimmed]; found {
|
|
383
381
|
return constraint, true
|
|
@@ -389,22 +387,16 @@ func (dnc *dnsConstraints) query(s string) (string, bool) {
|
|
|
389
387
|
type emailConstraints struct {
|
|
390
388
|
dnsConstraints interface{ query(string) (string, bool) }
|
|
391
389
|
|
|
392
|
-
|
|
393
|
-
// constraints, which we need to check for separately since they don't
|
|
394
|
-
// follow the same matching rules as the domain-based constraints. The
|
|
395
|
-
// domain portion of the rfc2821Mailbox has been lowercased, since the
|
|
396
|
-
// domain portion is case insensitive. When checking the map for an email,
|
|
397
|
-
// the domain portion of the query should also be lowercased.
|
|
398
|
-
fullEmails map[rfc2821Mailbox]struct{}
|
|
390
|
+
fullEmails map[string]string
|
|
399
391
|
}
|
|
400
392
|
|
|
401
393
|
func newEmailConstraints(l []string, permitted bool) interface {
|
|
402
|
-
query(
|
|
394
|
+
query(parsedEmail) (string, bool)
|
|
403
395
|
} {
|
|
404
396
|
if len(l) == 0 {
|
|
405
397
|
return nil
|
|
406
398
|
}
|
|
407
|
-
exactMap := map[
|
|
399
|
+
exactMap := map[string]string{}
|
|
408
400
|
var domains []string
|
|
409
401
|
for _, c := range l {
|
|
410
402
|
if !strings.ContainsRune(c, '@') {
|
|
@@ -419,8 +411,7 @@ func newEmailConstraints(l []string, permitted bool) interface {
|
|
|
419
411
|
// certificate since parsing.
|
|
420
412
|
continue
|
|
421
413
|
}
|
|
422
|
-
parsed.
|
|
423
|
-
exactMap[parsed] = struct{}{}
|
|
414
|
+
exactMap[parsed.local] = parsed.domain
|
|
424
415
|
}
|
|
425
416
|
ec := &emailConstraints{
|
|
426
417
|
fullEmails: exactMap,
|
|
@@ -431,16 +422,16 @@ func newEmailConstraints(l []string, permitted bool) interface {
|
|
|
431
422
|
return ec
|
|
432
423
|
}
|
|
433
424
|
|
|
434
|
-
func (ec *emailConstraints) query(s
|
|
435
|
-
if len(ec.fullEmails) > 0 {
|
|
436
|
-
if
|
|
437
|
-
return
|
|
425
|
+
func (ec *emailConstraints) query(s parsedEmail) (string, bool) {
|
|
426
|
+
if len(ec.fullEmails) > 0 && strings.ContainsRune(s.email, '@') {
|
|
427
|
+
if domain, ok := ec.fullEmails[s.mailbox.local]; ok && strings.EqualFold(domain, s.mailbox.domain) {
|
|
428
|
+
return ec.fullEmails[s.email] + "@" + s.mailbox.domain, true
|
|
438
429
|
}
|
|
439
430
|
}
|
|
440
431
|
if ec.dnsConstraints == nil {
|
|
441
432
|
return "", false
|
|
442
433
|
}
|
|
443
|
-
constraint, found := ec.dnsConstraints.query(s.domain)
|
|
434
|
+
constraint, found := ec.dnsConstraints.query(s.mailbox.domain)
|
|
444
435
|
return constraint, found
|
|
445
436
|
}
|
|
446
437
|
|
|
@@ -450,7 +441,7 @@ type constraints[T any, V any] struct {
|
|
|
450
441
|
excluded interface{ query(V) (T, bool) }
|
|
451
442
|
}
|
|
452
443
|
|
|
453
|
-
func checkConstraints[T string | *net.IPNet, V any, P string | net.IP | parsedURI |
|
|
444
|
+
func checkConstraints[T string | *net.IPNet, V any, P string | net.IP | parsedURI | parsedEmail](c constraints[T, V], s V, p P) error {
|
|
454
445
|
if c.permitted != nil {
|
|
455
446
|
if _, found := c.permitted.query(s); !found {
|
|
456
447
|
return fmt.Errorf("%s %q is not permitted by any constraint", c.constraintType, p)
|
|
@@ -468,13 +459,13 @@ type chainConstraints struct {
|
|
|
468
459
|
ip constraints[*net.IPNet, net.IP]
|
|
469
460
|
dns constraints[string, string]
|
|
470
461
|
uri constraints[string, string]
|
|
471
|
-
email constraints[string,
|
|
462
|
+
email constraints[string, parsedEmail]
|
|
472
463
|
|
|
473
464
|
index int
|
|
474
465
|
next *chainConstraints
|
|
475
466
|
}
|
|
476
467
|
|
|
477
|
-
func (cc *chainConstraints) check(dns []string, uris []parsedURI, emails []
|
|
468
|
+
func (cc *chainConstraints) check(dns []string, uris []parsedURI, emails []parsedEmail, ips []net.IP) error {
|
|
478
469
|
for _, ip := range ips {
|
|
479
470
|
if err := checkConstraints(cc.ip, ip, ip); err != nil {
|
|
480
471
|
return err
|
|
@@ -497,8 +488,8 @@ func (cc *chainConstraints) check(dns []string, uris []parsedURI, emails []rfc28
|
|
|
497
488
|
}
|
|
498
489
|
}
|
|
499
490
|
for _, e := range emails {
|
|
500
|
-
if !domainNameValid(e.domain, false) {
|
|
501
|
-
return fmt.Errorf("x509: cannot parse rfc822Name %q", e)
|
|
491
|
+
if !domainNameValid(e.mailbox.domain, false) {
|
|
492
|
+
return fmt.Errorf("x509: cannot parse rfc822Name %q", e.mailbox)
|
|
502
493
|
}
|
|
503
494
|
if err := checkConstraints(cc.email, e, e); err != nil {
|
|
504
495
|
return err
|
|
@@ -518,7 +509,7 @@ func checkChainConstraints(chain []*Certificate) error {
|
|
|
518
509
|
ip: constraints[*net.IPNet, net.IP]{"IP address", newIPNetConstraints(c.PermittedIPRanges), newIPNetConstraints(c.ExcludedIPRanges)},
|
|
519
510
|
dns: constraints[string, string]{"DNS name", newDNSConstraints(c.PermittedDNSDomains, true), newDNSConstraints(c.ExcludedDNSDomains, false)},
|
|
520
511
|
uri: constraints[string, string]{"URI", newDNSConstraints(c.PermittedURIDomains, true), newDNSConstraints(c.ExcludedURIDomains, false)},
|
|
521
|
-
email: constraints[string,
|
|
512
|
+
email: constraints[string, parsedEmail]{"email address", newEmailConstraints(c.PermittedEmailAddresses, true), newEmailConstraints(c.ExcludedEmailAddresses, false)},
|
|
522
513
|
index: i,
|
|
523
514
|
}
|
|
524
515
|
if currentConstraints == nil {
|
|
@@ -601,15 +592,24 @@ func parseURIs(uris []*url.URL) ([]parsedURI, error) {
|
|
|
601
592
|
return parsed, nil
|
|
602
593
|
}
|
|
603
594
|
|
|
604
|
-
|
|
605
|
-
|
|
595
|
+
type parsedEmail struct {
|
|
596
|
+
email string
|
|
597
|
+
mailbox *rfc2821Mailbox
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
func (e parsedEmail) String() string {
|
|
601
|
+
return e.mailbox.local + "@" + e.mailbox.domain
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
func parseMailboxes(emails []string) ([]parsedEmail, error) {
|
|
605
|
+
parsed := make([]parsedEmail, 0, len(emails))
|
|
606
606
|
for _, email := range emails {
|
|
607
607
|
mailbox, ok := parseRFC2821Mailbox(email)
|
|
608
608
|
if !ok {
|
|
609
609
|
return nil, fmt.Errorf("cannot parse rfc822Name %q", email)
|
|
610
610
|
}
|
|
611
611
|
mailbox.domain = strings.ToLower(mailbox.domain)
|
|
612
|
-
parsed = append(parsed, mailbox)
|
|
612
|
+
parsed = append(parsed, parsedEmail{strings.ToLower(email), &mailbox})
|
|
613
613
|
}
|
|
614
614
|
return parsed, nil
|
|
615
615
|
}
|
|
@@ -253,10 +253,6 @@ type rfc2821Mailbox struct {
|
|
|
253
253
|
local, domain string
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
func (s rfc2821Mailbox) String() string {
|
|
257
|
-
return fmt.Sprintf("%s@%s", s.local, s.domain)
|
|
258
|
-
}
|
|
259
|
-
|
|
260
256
|
// parseRFC2821Mailbox parses an email address into local and domain parts,
|
|
261
257
|
// based on the ABNF for a “Mailbox” from RFC 2821. According to RFC 5280,
|
|
262
258
|
// Section 4.2.1.6 that's correct for an rfc822Name from a certificate: “The
|
|
@@ -720,8 +716,6 @@ func alreadyInChain(candidate *Certificate, chain []*Certificate) bool {
|
|
|
720
716
|
// for failed checks due to different intermediates having the same Subject.
|
|
721
717
|
const maxChainSignatureChecks = 100
|
|
722
718
|
|
|
723
|
-
var errSignatureLimit = errors.New("x509: signature check attempts limit reached while verifying certificate chain")
|
|
724
|
-
|
|
725
719
|
func (c *Certificate) buildChains(currentChain []*Certificate, sigChecks *int, opts *VerifyOptions) (chains [][]*Certificate, err error) {
|
|
726
720
|
var (
|
|
727
721
|
hintErr error
|
|
@@ -729,16 +723,16 @@ func (c *Certificate) buildChains(currentChain []*Certificate, sigChecks *int, o
|
|
|
729
723
|
)
|
|
730
724
|
|
|
731
725
|
considerCandidate := func(certType int, candidate potentialParent) {
|
|
726
|
+
if candidate.cert.PublicKey == nil || alreadyInChain(candidate.cert, currentChain) {
|
|
727
|
+
return
|
|
728
|
+
}
|
|
729
|
+
|
|
732
730
|
if sigChecks == nil {
|
|
733
731
|
sigChecks = new(int)
|
|
734
732
|
}
|
|
735
733
|
*sigChecks++
|
|
736
734
|
if *sigChecks > maxChainSignatureChecks {
|
|
737
|
-
err =
|
|
738
|
-
return
|
|
739
|
-
}
|
|
740
|
-
|
|
741
|
-
if candidate.cert.PublicKey == nil || alreadyInChain(candidate.cert, currentChain) {
|
|
735
|
+
err = errors.New("x509: signature check attempts limit reached while verifying certificate chain")
|
|
742
736
|
return
|
|
743
737
|
}
|
|
744
738
|
|
|
@@ -779,20 +773,11 @@ func (c *Certificate) buildChains(currentChain []*Certificate, sigChecks *int, o
|
|
|
779
773
|
}
|
|
780
774
|
}
|
|
781
775
|
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
{rootCertificate, opts.Roots.findPotentialParents(c)},
|
|
788
|
-
{intermediateCertificate, opts.Intermediates.findPotentialParents(c)},
|
|
789
|
-
} {
|
|
790
|
-
for _, parent := range parents.potentials {
|
|
791
|
-
considerCandidate(parents.certType, parent)
|
|
792
|
-
if err == errSignatureLimit {
|
|
793
|
-
break candidateLoop
|
|
794
|
-
}
|
|
795
|
-
}
|
|
776
|
+
for _, root := range opts.Roots.findPotentialParents(c) {
|
|
777
|
+
considerCandidate(rootCertificate, root)
|
|
778
|
+
}
|
|
779
|
+
for _, intermediate := range opts.Intermediates.findPotentialParents(c) {
|
|
780
|
+
considerCandidate(intermediateCertificate, intermediate)
|
|
796
781
|
}
|
|
797
782
|
|
|
798
783
|
if len(chains) > 0 {
|
|
@@ -1295,12 +1280,12 @@ func policiesValid(chain []*Certificate, opts VerifyOptions) bool {
|
|
|
1295
1280
|
} else {
|
|
1296
1281
|
// 6.1.4 (b) (3) (i) -- as updated by RFC 9618
|
|
1297
1282
|
pg.deleteLeaf(mapping.IssuerDomainPolicy)
|
|
1283
|
+
|
|
1284
|
+
// 6.1.4 (b) (3) (ii) -- as updated by RFC 9618
|
|
1285
|
+
pg.prune()
|
|
1298
1286
|
}
|
|
1299
1287
|
}
|
|
1300
1288
|
|
|
1301
|
-
// 6.1.4 (b) (3) (ii) -- as updated by RFC 9618
|
|
1302
|
-
pg.prune()
|
|
1303
|
-
|
|
1304
1289
|
for issuerStr, subjectPolicies := range mappings {
|
|
1305
1290
|
// 6.1.4 (b) (1) -- as updated by RFC 9618
|
|
1306
1291
|
if matching := pg.leafWithPolicy(OID{der: []byte(issuerStr)}); matching != nil {
|
|
@@ -14,12 +14,11 @@ func _() {
|
|
|
14
14
|
_ = x[attrStyle-3]
|
|
15
15
|
_ = x[attrURL-4]
|
|
16
16
|
_ = x[attrSrcset-5]
|
|
17
|
-
_ = x[attrMetaContent-6]
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
const _attr_name = "
|
|
19
|
+
const _attr_name = "attrNoneattrScriptattrScriptTypeattrStyleattrURLattrSrcset"
|
|
21
20
|
|
|
22
|
-
var _attr_index = [...]uint8{0, 8, 18, 32, 41, 48, 58
|
|
21
|
+
var _attr_index = [...]uint8{0, 8, 18, 32, 41, 48, 58}
|
|
23
22
|
|
|
24
23
|
func (i attr) String() string {
|
|
25
24
|
if i >= attr(len(_attr_index)-1) {
|
|
@@ -6,7 +6,6 @@ package template
|
|
|
6
6
|
|
|
7
7
|
import (
|
|
8
8
|
"fmt"
|
|
9
|
-
"slices"
|
|
10
9
|
"text/template/parse"
|
|
11
10
|
)
|
|
12
11
|
|
|
@@ -38,7 +37,7 @@ func (c context) String() string {
|
|
|
38
37
|
if c.err != nil {
|
|
39
38
|
err = c.err
|
|
40
39
|
}
|
|
41
|
-
return fmt.Sprintf("{%v %v %v %v %v %v %v
|
|
40
|
+
return fmt.Sprintf("{%v %v %v %v %v %v %v}", c.state, c.delim, c.urlPart, c.jsCtx, c.attr, c.element, err)
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
// eq reports whether two contexts are equal.
|
|
@@ -47,7 +46,6 @@ func (c context) eq(d context) bool {
|
|
|
47
46
|
c.delim == d.delim &&
|
|
48
47
|
c.urlPart == d.urlPart &&
|
|
49
48
|
c.jsCtx == d.jsCtx &&
|
|
50
|
-
slices.Equal(c.jsBraceDepth, d.jsBraceDepth) &&
|
|
51
49
|
c.attr == d.attr &&
|
|
52
50
|
c.element == d.element &&
|
|
53
51
|
c.err == d.err
|
|
@@ -70,9 +68,6 @@ func (c context) mangle(templateName string) string {
|
|
|
70
68
|
if c.jsCtx != jsCtxRegexp {
|
|
71
69
|
s += "_" + c.jsCtx.String()
|
|
72
70
|
}
|
|
73
|
-
if c.jsBraceDepth != nil {
|
|
74
|
-
s += fmt.Sprintf("_jsBraceDepth(%v)", c.jsBraceDepth)
|
|
75
|
-
}
|
|
76
71
|
if c.attr != attrNone {
|
|
77
72
|
s += "_" + c.attr.String()
|
|
78
73
|
}
|
|
@@ -82,13 +77,6 @@ func (c context) mangle(templateName string) string {
|
|
|
82
77
|
return s
|
|
83
78
|
}
|
|
84
79
|
|
|
85
|
-
// clone returns a copy of c with the same field values.
|
|
86
|
-
func (c context) clone() context {
|
|
87
|
-
clone := c
|
|
88
|
-
clone.jsBraceDepth = slices.Clone(c.jsBraceDepth)
|
|
89
|
-
return clone
|
|
90
|
-
}
|
|
91
|
-
|
|
92
80
|
// state describes a high-level HTML parser state.
|
|
93
81
|
//
|
|
94
82
|
// It bounds the top of the element stack, and by extension the HTML insertion
|
|
@@ -168,10 +156,6 @@ const (
|
|
|
168
156
|
// stateError is an infectious error state outside any valid
|
|
169
157
|
// HTML/CSS/JS construct.
|
|
170
158
|
stateError
|
|
171
|
-
// stateMetaContent occurs inside a HTML meta element content attribute.
|
|
172
|
-
stateMetaContent
|
|
173
|
-
// stateMetaContentURL occurs inside a "url=" tag in a HTML meta element content attribute.
|
|
174
|
-
stateMetaContentURL
|
|
175
159
|
// stateDead marks unreachable code after a {{break}} or {{continue}}.
|
|
176
160
|
stateDead
|
|
177
161
|
)
|
|
@@ -283,8 +267,6 @@ const (
|
|
|
283
267
|
elementTextarea
|
|
284
268
|
// elementTitle corresponds to the RCDATA <title> element.
|
|
285
269
|
elementTitle
|
|
286
|
-
// elementMeta corresponds to the HTML <meta> element.
|
|
287
|
-
elementMeta
|
|
288
270
|
)
|
|
289
271
|
|
|
290
272
|
//go:generate stringer -type attr
|
|
@@ -306,6 +288,4 @@ const (
|
|
|
306
288
|
attrURL
|
|
307
289
|
// attrSrcset corresponds to a srcset attribute.
|
|
308
290
|
attrSrcset
|
|
309
|
-
// attrMetaContent corresponds to the content attribute in meta HTML element.
|
|
310
|
-
attrMetaContent
|
|
311
291
|
)
|
|
@@ -13,12 +13,11 @@ func _() {
|
|
|
13
13
|
_ = x[elementStyle-2]
|
|
14
14
|
_ = x[elementTextarea-3]
|
|
15
15
|
_ = x[elementTitle-4]
|
|
16
|
-
_ = x[elementMeta-5]
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
const _element_name = "
|
|
18
|
+
const _element_name = "elementNoneelementScriptelementStyleelementTextareaelementTitle"
|
|
20
19
|
|
|
21
|
-
var _element_index = [...]uint8{0, 11, 24, 36, 51, 63
|
|
20
|
+
var _element_index = [...]uint8{0, 11, 24, 36, 51, 63}
|
|
22
21
|
|
|
23
22
|
func (i element) String() string {
|
|
24
23
|
if i >= element(len(_element_index)-1) {
|
|
@@ -166,8 +166,6 @@ func (e *escaper) escape(c context, n parse.Node) context {
|
|
|
166
166
|
|
|
167
167
|
var debugAllowActionJSTmpl = godebug.New("jstmpllitinterp")
|
|
168
168
|
|
|
169
|
-
var htmlmetacontenturlescape = godebug.New("htmlmetacontenturlescape")
|
|
170
|
-
|
|
171
169
|
// escapeAction escapes an action template node.
|
|
172
170
|
func (e *escaper) escapeAction(c context, n *parse.ActionNode) context {
|
|
173
171
|
if len(n.Pipe.Decl) != 0 {
|
|
@@ -225,18 +223,6 @@ func (e *escaper) escapeAction(c context, n *parse.ActionNode) context {
|
|
|
225
223
|
default:
|
|
226
224
|
panic(c.urlPart.String())
|
|
227
225
|
}
|
|
228
|
-
case stateMetaContent:
|
|
229
|
-
// Handled below in delim check.
|
|
230
|
-
case stateMetaContentURL:
|
|
231
|
-
if htmlmetacontenturlescape.Value() != "0" {
|
|
232
|
-
s = append(s, "_html_template_urlfilter")
|
|
233
|
-
} else {
|
|
234
|
-
// We don't have a great place to increment this, since it's hard to
|
|
235
|
-
// know if we actually escape any urls in _html_template_urlfilter,
|
|
236
|
-
// since it has no information about what context it is being
|
|
237
|
-
// executed in etc. This is probably the best we can do.
|
|
238
|
-
htmlmetacontenturlescape.IncNonDefault()
|
|
239
|
-
}
|
|
240
226
|
case stateJS:
|
|
241
227
|
s = append(s, "_html_template_jsvalescaper")
|
|
242
228
|
// A slash after a value starts a div operator.
|
|
@@ -523,7 +509,7 @@ func (e *escaper) escapeBranch(c context, n *parse.BranchNode, nodeName string)
|
|
|
523
509
|
if nodeName == "range" {
|
|
524
510
|
e.rangeContext = &rangeContext{outer: e.rangeContext}
|
|
525
511
|
}
|
|
526
|
-
c0 := e.escapeList(c
|
|
512
|
+
c0 := e.escapeList(c, n.List)
|
|
527
513
|
if nodeName == "range" {
|
|
528
514
|
if c0.state != stateError {
|
|
529
515
|
c0 = joinRange(c0, e.rangeContext)
|
|
@@ -554,7 +540,7 @@ func (e *escaper) escapeBranch(c context, n *parse.BranchNode, nodeName string)
|
|
|
554
540
|
return c0
|
|
555
541
|
}
|
|
556
542
|
}
|
|
557
|
-
c1 := e.escapeList(c
|
|
543
|
+
c1 := e.escapeList(c, n.ElseList)
|
|
558
544
|
return join(c0, c1, n, nodeName)
|
|
559
545
|
}
|
|
560
546
|
|
|
@@ -36,14 +36,12 @@ func _() {
|
|
|
36
36
|
_ = x[stateCSSBlockCmt-25]
|
|
37
37
|
_ = x[stateCSSLineCmt-26]
|
|
38
38
|
_ = x[stateError-27]
|
|
39
|
-
_ = x[
|
|
40
|
-
_ = x[stateMetaContentURL-29]
|
|
41
|
-
_ = x[stateDead-30]
|
|
39
|
+
_ = x[stateDead-28]
|
|
42
40
|
}
|
|
43
41
|
|
|
44
|
-
const _state_name = "
|
|
42
|
+
const _state_name = "stateTextstateTagstateAttrNamestateAfterNamestateBeforeValuestateHTMLCmtstateRCDATAstateAttrstateURLstateSrcsetstateJSstateJSDqStrstateJSSqStrstateJSTmplLitstateJSRegexpstateJSBlockCmtstateJSLineCmtstateJSHTMLOpenCmtstateJSHTMLCloseCmtstateCSSstateCSSDqStrstateCSSSqStrstateCSSDqURLstateCSSSqURLstateCSSURLstateCSSBlockCmtstateCSSLineCmtstateErrorstateDead"
|
|
45
43
|
|
|
46
|
-
var _state_index = [...]uint16{0, 9, 17, 30, 44, 60, 72, 83, 92, 100, 111, 118, 130, 142, 156, 169, 184, 198, 216, 235, 243, 256, 269, 282, 295, 306, 322, 337, 347,
|
|
44
|
+
var _state_index = [...]uint16{0, 9, 17, 30, 44, 60, 72, 83, 92, 100, 111, 118, 130, 142, 156, 169, 184, 198, 216, 235, 243, 256, 269, 282, 295, 306, 322, 337, 347, 356}
|
|
47
45
|
|
|
48
46
|
func (i state) String() string {
|
|
49
47
|
if i >= state(len(_state_index)-1) {
|