@ttsc/linux-arm 0.8.0-dev.20260505 → 0.8.0

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.
Files changed (78) hide show
  1. package/bin/go/VERSION +2 -2
  2. package/bin/go/bin/go +0 -0
  3. package/bin/go/bin/gofmt +0 -0
  4. package/bin/go/pkg/tool/linux_arm/asm +0 -0
  5. package/bin/go/pkg/tool/linux_arm/cgo +0 -0
  6. package/bin/go/pkg/tool/linux_arm/compile +0 -0
  7. package/bin/go/pkg/tool/linux_arm/cover +0 -0
  8. package/bin/go/pkg/tool/linux_arm/fix +0 -0
  9. package/bin/go/pkg/tool/linux_arm/link +0 -0
  10. package/bin/go/pkg/tool/linux_arm/preprofile +0 -0
  11. package/bin/go/pkg/tool/linux_arm/vet +0 -0
  12. package/bin/go/src/archive/tar/format.go +0 -6
  13. package/bin/go/src/archive/tar/reader.go +4 -24
  14. package/bin/go/src/builtin/builtin.go +4 -13
  15. package/bin/go/src/crypto/tls/conn.go +3 -7
  16. package/bin/go/src/crypto/tls/handshake_client_tls13.go +2 -2
  17. package/bin/go/src/crypto/tls/handshake_server_tls13.go +2 -2
  18. package/bin/go/src/crypto/x509/constraints.go +33 -33
  19. package/bin/go/src/crypto/x509/verify.go +13 -28
  20. package/bin/go/src/html/template/attr_string.go +2 -3
  21. package/bin/go/src/html/template/context.go +1 -21
  22. package/bin/go/src/html/template/element_string.go +2 -3
  23. package/bin/go/src/html/template/escape.go +2 -16
  24. package/bin/go/src/html/template/state_string.go +3 -5
  25. package/bin/go/src/html/template/transition.go +6 -41
  26. package/bin/go/src/internal/buildcfg/zbootstrap.go +1 -1
  27. package/bin/go/src/internal/godebugs/table.go +0 -1
  28. package/bin/go/src/internal/poll/fd_windows.go +38 -64
  29. package/bin/go/src/internal/poll/sendfile_windows.go +1 -3
  30. package/bin/go/src/internal/syscall/unix/at.go +17 -0
  31. package/bin/go/src/internal/syscall/unix/at_sysnum_linux.go +1 -2
  32. package/bin/go/src/internal/syscall/windows/at_windows.go +3 -20
  33. package/bin/go/src/internal/syscall/windows/syscall_windows.go +0 -4
  34. package/bin/go/src/internal/syscall/windows/types_windows.go +0 -82
  35. package/bin/go/src/internal/syscall/windows/zsyscall_windows.go +0 -27
  36. package/bin/go/src/net/http/doc.go +1 -0
  37. package/bin/go/src/net/sendfile.go +0 -2
  38. package/bin/go/src/net/sendfile_stub.go +0 -2
  39. package/bin/go/src/net/sendfile_windows.go +0 -3
  40. package/bin/go/src/net/url/url.go +16 -21
  41. package/bin/go/src/os/dir_darwin.go +2 -2
  42. package/bin/go/src/os/dir_unix.go +2 -2
  43. package/bin/go/src/os/file.go +3 -0
  44. package/bin/go/src/os/file_unix.go +5 -9
  45. package/bin/go/src/os/root_unix.go +0 -1
  46. package/bin/go/src/os/stat.go +0 -3
  47. package/bin/go/src/reflect/value.go +2 -3
  48. package/bin/go/src/runtime/defs_linux_mips64x.go +1 -1
  49. package/bin/go/src/runtime/defs_linux_mipsx.go +1 -1
  50. package/bin/go/src/runtime/metrics/doc.go +0 -5
  51. package/bin/go/src/runtime/print.go +4 -16
  52. package/bin/go/src/runtime/race/README +9 -9
  53. package/bin/go/src/runtime/race/internal/amd64v1/race_darwin.syso +0 -0
  54. package/bin/go/src/runtime/race/internal/amd64v1/race_freebsd.syso +0 -0
  55. package/bin/go/src/runtime/race/internal/amd64v1/race_linux.syso +0 -0
  56. package/bin/go/src/runtime/race/internal/amd64v1/race_windows.syso +0 -0
  57. package/bin/go/src/runtime/race/internal/amd64v3/race_linux.syso +0 -0
  58. package/bin/go/src/runtime/race/race_darwin_arm64.syso +0 -0
  59. package/bin/go/src/runtime/race/race_linux_arm64.syso +0 -0
  60. package/bin/go/src/runtime/race/race_linux_loong64.syso +0 -0
  61. package/bin/go/src/runtime/race/race_linux_s390x.syso +0 -0
  62. package/bin/ttsc +0 -0
  63. package/package.json +1 -1
  64. package/bin/go/src/internal/poll/fstatat_unix.go +0 -22
  65. package/bin/go/src/internal/syscall/unix/fchmodat_linux.go +0 -51
  66. package/bin/go/src/internal/syscall/unix/fchmodat_other.go +0 -29
  67. package/bin/go/src/os/statat.go +0 -24
  68. package/bin/go/src/os/statat_other.go +0 -12
  69. package/bin/go/src/os/statat_unix.go +0 -20
  70. package/bin/go/src/runtime/race/internal/amd64v1/race_darwin.patch +0 -63
  71. package/bin/go/src/runtime/race/internal/amd64v1/race_freebsd.patch +0 -63
  72. package/bin/go/src/runtime/race/internal/amd64v1/race_linux.patch +0 -63
  73. package/bin/go/src/runtime/race/internal/amd64v1/race_windows.patch +0 -63
  74. package/bin/go/src/runtime/race/internal/amd64v3/race_linux.patch +0 -63
  75. package/bin/go/src/runtime/race/race_darwin_arm64.patch +0 -63
  76. package/bin/go/src/runtime/race/race_linux_arm64.patch +0 -63
  77. package/bin/go/src/runtime/race/race_linux_loong64.patch +0 -63
  78. 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
2
- time 2026-03-27T21:58:29Z
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
@@ -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
- totalSize := len(s)
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
- var err error
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, err = appendSparseEntry(spd, sparseEntry{Offset: offset, Length: length})
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, err = appendSparseEntry(spd, sparseEntry{Offset: offset, Length: length})
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 new allocates a new, initialized variable and returns
228
- // a pointer to it. It accepts a single argument, which may be either a type
229
- // or an expression.
230
- // If the argument is a type T, then new(T) allocates a variable of type T
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, keyUpdate.updateRequested); err != nil {
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, locked bool) error {
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
- if locked {
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, false); err != nil {
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, false); err != nil {
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, false); err != nil {
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, false); err != nil {
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 with
62
- // the domain portion of the email lowercased, since it is case insensitive. When
63
- // looking up an email address in the constraint set, we first check the full
64
- // email address map, and if we don't find anything, we check the domain portion
65
- // of the email address against the dnsConstraints.
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 && len(s) > 0 && s[0] == '*' {
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
- // fullEmails is map of rfc2821Mailboxs that are fully specified in the
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(rfc2821Mailbox) (string, bool)
394
+ query(parsedEmail) (string, bool)
403
395
  } {
404
396
  if len(l) == 0 {
405
397
  return nil
406
398
  }
407
- exactMap := map[rfc2821Mailbox]struct{}{}
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.domain = strings.ToLower(parsed.domain)
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 rfc2821Mailbox) (string, bool) {
435
- if len(ec.fullEmails) > 0 {
436
- if _, ok := ec.fullEmails[s]; ok {
437
- return fmt.Sprintf("%s@%s", s.local, s.domain), true
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 | rfc2821Mailbox](c constraints[T, V], s V, p P) error {
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, rfc2821Mailbox]
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 []rfc2821Mailbox, ips []net.IP) error {
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, rfc2821Mailbox]{"email address", newEmailConstraints(c.PermittedEmailAddresses, true), newEmailConstraints(c.ExcludedEmailAddresses, false)},
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
- func parseMailboxes(emails []string) ([]rfc2821Mailbox, error) {
605
- parsed := make([]rfc2821Mailbox, 0, len(emails))
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 = errSignatureLimit
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
- candidateLoop:
783
- for _, parents := range []struct {
784
- certType int
785
- potentials []potentialParent
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 = "attrNoneattrScriptattrScriptTypeattrStyleattrURLattrSrcsetattrMetaContent"
19
+ const _attr_name = "attrNoneattrScriptattrScriptTypeattrStyleattrURLattrSrcset"
21
20
 
22
- var _attr_index = [...]uint8{0, 8, 18, 32, 41, 48, 58, 73}
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 %v}", c.state, c.delim, c.urlPart, c.jsCtx, c.jsBraceDepth, c.attr, c.element, err)
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 = "elementNoneelementScriptelementStyleelementTextareaelementTitleelementMeta"
18
+ const _element_name = "elementNoneelementScriptelementStyleelementTextareaelementTitle"
20
19
 
21
- var _element_index = [...]uint8{0, 11, 24, 36, 51, 63, 74}
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.clone(), n.List)
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.clone(), n.ElseList)
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[stateMetaContent-28]
40
- _ = x[stateMetaContentURL-29]
41
- _ = x[stateDead-30]
39
+ _ = x[stateDead-28]
42
40
  }
43
41
 
44
- const _state_name = "stateTextstateTagstateAttrNamestateAfterNamestateBeforeValuestateHTMLCmtstateRCDATAstateAttrstateURLstateSrcsetstateJSstateJSDqStrstateJSSqStrstateJSTmplLitstateJSRegexpstateJSBlockCmtstateJSLineCmtstateJSHTMLOpenCmtstateJSHTMLCloseCmtstateCSSstateCSSDqStrstateCSSSqStrstateCSSDqURLstateCSSSqURLstateCSSURLstateCSSBlockCmtstateCSSLineCmtstateErrorstateMetaContentstateMetaContentURLstateDead"
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, 363, 382, 391}
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) {