]> git.feebdaed.xyz Git - 0xmirror/kubernetes.git/commitdiff
Bump golang.org/x/crypto to v0.45.0
authorDavanum Srinivas <davanum@gmail.com>
Mon, 1 Dec 2025 19:11:01 +0000 (14:11 -0500)
committerDavanum Srinivas <davanum@gmail.com>
Mon, 1 Dec 2025 19:11:01 +0000 (14:11 -0500)
Signed-off-by: Davanum Srinivas <davanum@gmail.com>
150 files changed:
go.mod
go.sum
go.work.sum
staging/src/k8s.io/api/go.mod
staging/src/k8s.io/api/go.sum
staging/src/k8s.io/apiextensions-apiserver/go.mod
staging/src/k8s.io/apiextensions-apiserver/go.sum
staging/src/k8s.io/apimachinery/go.mod
staging/src/k8s.io/apimachinery/go.sum
staging/src/k8s.io/apiserver/go.mod
staging/src/k8s.io/apiserver/go.sum
staging/src/k8s.io/cli-runtime/go.mod
staging/src/k8s.io/cli-runtime/go.sum
staging/src/k8s.io/client-go/go.mod
staging/src/k8s.io/client-go/go.sum
staging/src/k8s.io/cloud-provider/go.mod
staging/src/k8s.io/cloud-provider/go.sum
staging/src/k8s.io/cluster-bootstrap/go.mod
staging/src/k8s.io/cluster-bootstrap/go.sum
staging/src/k8s.io/code-generator/examples/go.mod
staging/src/k8s.io/code-generator/examples/go.sum
staging/src/k8s.io/code-generator/go.mod
staging/src/k8s.io/code-generator/go.sum
staging/src/k8s.io/component-base/go.mod
staging/src/k8s.io/component-base/go.sum
staging/src/k8s.io/component-helpers/go.mod
staging/src/k8s.io/component-helpers/go.sum
staging/src/k8s.io/controller-manager/go.mod
staging/src/k8s.io/controller-manager/go.sum
staging/src/k8s.io/cri-api/go.mod
staging/src/k8s.io/cri-api/go.sum
staging/src/k8s.io/cri-client/go.mod
staging/src/k8s.io/cri-client/go.sum
staging/src/k8s.io/csi-translation-lib/go.mod
staging/src/k8s.io/csi-translation-lib/go.sum
staging/src/k8s.io/dynamic-resource-allocation/go.mod
staging/src/k8s.io/dynamic-resource-allocation/go.sum
staging/src/k8s.io/endpointslice/go.mod
staging/src/k8s.io/endpointslice/go.sum
staging/src/k8s.io/externaljwt/go.mod
staging/src/k8s.io/externaljwt/go.sum
staging/src/k8s.io/kms/go.mod
staging/src/k8s.io/kms/go.sum
staging/src/k8s.io/kms/internal/plugins/_mock/go.mod
staging/src/k8s.io/kms/internal/plugins/_mock/go.sum
staging/src/k8s.io/kube-aggregator/go.mod
staging/src/k8s.io/kube-aggregator/go.sum
staging/src/k8s.io/kube-controller-manager/go.mod
staging/src/k8s.io/kube-controller-manager/go.sum
staging/src/k8s.io/kube-proxy/go.mod
staging/src/k8s.io/kube-proxy/go.sum
staging/src/k8s.io/kube-scheduler/go.mod
staging/src/k8s.io/kube-scheduler/go.sum
staging/src/k8s.io/kubectl/go.mod
staging/src/k8s.io/kubectl/go.sum
staging/src/k8s.io/kubelet/go.mod
staging/src/k8s.io/kubelet/go.sum
staging/src/k8s.io/metrics/go.mod
staging/src/k8s.io/metrics/go.sum
staging/src/k8s.io/mount-utils/go.mod
staging/src/k8s.io/mount-utils/go.sum
staging/src/k8s.io/pod-security-admission/go.mod
staging/src/k8s.io/pod-security-admission/go.sum
staging/src/k8s.io/sample-apiserver/go.mod
staging/src/k8s.io/sample-apiserver/go.sum
staging/src/k8s.io/sample-cli-plugin/go.mod
staging/src/k8s.io/sample-cli-plugin/go.sum
staging/src/k8s.io/sample-controller/go.mod
staging/src/k8s.io/sample-controller/go.sum
vendor/golang.org/x/crypto/chacha20/chacha_arm64.s
vendor/golang.org/x/crypto/curve25519/curve25519.go
vendor/golang.org/x/crypto/ed25519/ed25519.go
vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go
vendor/golang.org/x/crypto/ssh/cipher.go
vendor/golang.org/x/crypto/ssh/client_auth.go
vendor/golang.org/x/crypto/ssh/common.go
vendor/golang.org/x/crypto/ssh/doc.go
vendor/golang.org/x/crypto/ssh/handshake.go
vendor/golang.org/x/crypto/ssh/kex.go
vendor/golang.org/x/crypto/ssh/keys.go
vendor/golang.org/x/crypto/ssh/mac.go
vendor/golang.org/x/crypto/ssh/messages.go
vendor/golang.org/x/crypto/ssh/mlkem.go
vendor/golang.org/x/crypto/ssh/server.go
vendor/golang.org/x/crypto/ssh/ssh_gss.go
vendor/golang.org/x/crypto/ssh/streamlocal.go
vendor/golang.org/x/crypto/ssh/tcpip.go
vendor/golang.org/x/crypto/ssh/transport.go
vendor/golang.org/x/net/context/context.go
vendor/golang.org/x/net/dns/dnsmessage/message.go
vendor/golang.org/x/net/dns/dnsmessage/svcb.go [new file with mode: 0644]
vendor/golang.org/x/net/html/escape.go
vendor/golang.org/x/net/html/parse.go
vendor/golang.org/x/net/html/render.go
vendor/golang.org/x/net/http2/config.go
vendor/golang.org/x/net/http2/config_go124.go [deleted file]
vendor/golang.org/x/net/http2/config_go125.go [new file with mode: 0644]
vendor/golang.org/x/net/http2/config_go126.go [new file with mode: 0644]
vendor/golang.org/x/net/http2/config_pre_go124.go [deleted file]
vendor/golang.org/x/net/http2/frame.go
vendor/golang.org/x/net/http2/gotrack.go
vendor/golang.org/x/net/http2/http2.go
vendor/golang.org/x/net/http2/server.go
vendor/golang.org/x/net/http2/timer.go [deleted file]
vendor/golang.org/x/net/http2/transport.go
vendor/golang.org/x/net/http2/writesched.go
vendor/golang.org/x/net/http2/writesched_priority.go [deleted file]
vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go [new file with mode: 0644]
vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go [new file with mode: 0644]
vendor/golang.org/x/net/http2/writesched_roundrobin.go
vendor/golang.org/x/net/internal/httpcommon/request.go
vendor/golang.org/x/net/internal/socks/socks.go
vendor/golang.org/x/sync/errgroup/errgroup.go
vendor/golang.org/x/sys/cpu/cpu.go
vendor/golang.org/x/sys/cpu/cpu_arm64.go
vendor/golang.org/x/sys/cpu/cpu_arm64.s
vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go
vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go
vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go
vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go
vendor/golang.org/x/sys/unix/mkerrors.sh
vendor/golang.org/x/sys/unix/syscall_linux.go
vendor/golang.org/x/sys/unix/zerrors_linux.go
vendor/golang.org/x/sys/unix/zsyscall_linux.go
vendor/golang.org/x/sys/unix/ztypes_linux.go
vendor/golang.org/x/sys/windows/syscall_windows.go
vendor/golang.org/x/sys/windows/types_windows.go
vendor/golang.org/x/sys/windows/zsyscall_windows.go
vendor/golang.org/x/term/terminal.go
vendor/golang.org/x/text/unicode/bidi/core.go
vendor/golang.org/x/tools/go/ast/astutil/imports.go
vendor/golang.org/x/tools/go/ast/inspector/cursor.go
vendor/golang.org/x/tools/go/packages/golist.go
vendor/golang.org/x/tools/go/packages/visit.go
vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
vendor/golang.org/x/tools/go/types/typeutil/map.go
vendor/golang.org/x/tools/imports/forward.go
vendor/golang.org/x/tools/internal/event/core/event.go
vendor/golang.org/x/tools/internal/gcimporter/iexport.go
vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go [deleted file]
vendor/golang.org/x/tools/internal/imports/fix.go
vendor/golang.org/x/tools/internal/modindex/symbols.go
vendor/golang.org/x/tools/internal/stdlib/deps.go
vendor/golang.org/x/tools/internal/stdlib/manifest.go
vendor/golang.org/x/tools/internal/typesinternal/fx.go [new file with mode: 0644]
vendor/golang.org/x/tools/internal/typesinternal/isnamed.go [new file with mode: 0644]
vendor/golang.org/x/tools/internal/typesinternal/qualifier.go
vendor/golang.org/x/tools/internal/typesinternal/types.go
vendor/golang.org/x/tools/internal/typesinternal/zerovalue.go
vendor/modules.txt

diff --git a/go.mod b/go.mod
index 2a8847227b2536fe2733aed8fcb17dd3ab0c75af..a668bb2a43434c290ad7b3ecd2f5bdfe52d6a8e4 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -70,15 +70,15 @@ require (
        go.uber.org/goleak v1.3.0
        go.uber.org/zap v1.27.0
        go.yaml.in/yaml/v2 v2.4.3
-       golang.org/x/crypto v0.41.0
-       golang.org/x/net v0.43.0
+       golang.org/x/crypto v0.45.0
+       golang.org/x/net v0.47.0
        golang.org/x/oauth2 v0.30.0
-       golang.org/x/sync v0.17.0
-       golang.org/x/sys v0.37.0
-       golang.org/x/term v0.36.0
-       golang.org/x/text v0.29.0
+       golang.org/x/sync v0.18.0
+       golang.org/x/sys v0.38.0
+       golang.org/x/term v0.37.0
+       golang.org/x/text v0.31.0
        golang.org/x/time v0.9.0
-       golang.org/x/tools v0.36.0
+       golang.org/x/tools v0.38.0
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a
        google.golang.org/grpc v1.72.2
        google.golang.org/protobuf v1.36.8
@@ -212,7 +212,7 @@ require (
        go.uber.org/multierr v1.11.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/mod v0.28.0 // indirect
+       golang.org/x/mod v0.29.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
diff --git a/go.sum b/go.sum
index b8c525569becef3495e9f5c95ba92d5524711196..587606b0e1f23e2f1574c2c94c04af39822ef2b7 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -421,29 +421,29 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -456,25 +456,25 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
 golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
index 21897efe3dcfe1282d0aef768b5b613e6cb8bdcd..f0d660613136a470976bdacdec1127c4b457b7dd 100644 (file)
@@ -55,7 +55,7 @@ go.etcd.io/gofail v0.2.0 h1:p19drv16FKK345a09a1iubchlw/vmRuksmRzgBIGjcA=
 go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//snGVIM3Tx6QRzlQBao=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s=
 go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488 h1:3doPGa+Gg4snce233aCWnbZVFsyFMo/dR40KK/6skyE=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8 h1:LvzTn0GQhWuvKH/kVRS3R3bVAsdQWI7hvfLHGgh9+lU=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 gotest.tools/v3 v3.0.2 h1:kG1BFyqVHuQoVQiR1bWGnfz/fmHvvuiSPIV7rvl360E=
 sigs.k8s.io/kustomize/cmd/config v0.20.1 h1:4APUORmZe2BYrsqgGfEKdd/r7gM6i43egLrUzilpiFo=
index 95cfab8b4c5714527e749982c755f259a2f0519b..e695df23d6e6533e12e0692946cc46a7d95dd94c 100644 (file)
@@ -23,8 +23,8 @@ require (
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
index ebc29634ee9f1bd4ed31c6809bbc0834a0726bf4..13b50f4805cbfebf2b23b2fc8b7f9ae645df34db 100644 (file)
@@ -59,17 +59,17 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
index d141cb3d4030951a5d490d5743889ec795ba9033..7af0af8cbb963e9169e3fa0ce1bbd856508897bc 100644 (file)
@@ -21,8 +21,8 @@ require (
        go.opentelemetry.io/otel v1.36.0
        go.opentelemetry.io/otel/trace v1.36.0
        go.yaml.in/yaml/v2 v2.4.3
-       golang.org/x/sync v0.17.0
-       golang.org/x/text v0.29.0
+       golang.org/x/sync v0.18.0
+       golang.org/x/text v0.31.0
        google.golang.org/grpc v1.72.2
        google.golang.org/protobuf v1.36.8
        gopkg.in/evanphx/json-patch.v4 v4.13.0
@@ -107,15 +107,15 @@ require (
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.27.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/crypto v0.41.0 // indirect
+       golang.org/x/crypto v0.45.0 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/mod v0.28.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/mod v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       golang.org/x/tools v0.36.0 // indirect
+       golang.org/x/tools v0.38.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 6a306baaf895d00a69c17dda3b0fa5e6bb67bada..41664b3dfc8be9e147112fe756ce2556ac683098 100644 (file)
@@ -254,29 +254,29 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -285,25 +285,25 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
 golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
index 65a811a2cb8c24147a209ca4806e6c31f7b2c1a5..7f5413b84703e6523786b0594dbeb7b5afa401c9 100644 (file)
@@ -18,7 +18,7 @@ require (
        github.com/pmezard/go-difflib v1.0.0
        github.com/spf13/pflag v1.0.9
        github.com/stretchr/testify v1.11.1
-       golang.org/x/net v0.43.0
+       golang.org/x/net v0.47.0
        golang.org/x/time v0.9.0
        gopkg.in/evanphx/json-patch.v4 v4.13.0
        gopkg.in/inf.v0 v0.9.1
@@ -47,9 +47,7 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/mod v0.28.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
 )
index 65921e6ad72cb8a854367a393ad2cbf254e0f16e..a67952ce3c8276efc8921b11189ec6cd46169ed5 100644 (file)
@@ -94,22 +94,22 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index ebce57cec11a8733f1669039fae09ea6fab97340..34c1372427de155b97b23f7dc9eec5d5c3b5722c 100644 (file)
@@ -36,11 +36,11 @@ require (
        go.opentelemetry.io/otel/sdk v1.36.0
        go.opentelemetry.io/otel/trace v1.36.0
        go.uber.org/zap v1.27.0
-       golang.org/x/crypto v0.41.0
-       golang.org/x/net v0.43.0
-       golang.org/x/sync v0.17.0
-       golang.org/x/sys v0.37.0
-       golang.org/x/text v0.29.0
+       golang.org/x/crypto v0.45.0
+       golang.org/x/net v0.47.0
+       golang.org/x/sync v0.18.0
+       golang.org/x/sys v0.38.0
+       golang.org/x/text v0.31.0
        golang.org/x/time v0.9.0
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb
        google.golang.org/grpc v1.72.2
@@ -118,7 +118,7 @@ require (
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
index fae5e1dacbb18b70253d7bedeb6d62eaa54485ef..fdb50b22d6b4b181518aaff93d02f1cf70a28c7b 100644 (file)
@@ -256,29 +256,29 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -287,24 +287,24 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 54fa091d3a03b56e7137be6f1592e00217db0c63..22a48618b2f723a24dd8ee70e77ae0f0e80b7642 100644 (file)
@@ -16,8 +16,8 @@ require (
        github.com/spf13/pflag v1.0.9
        github.com/stretchr/testify v1.11.1
        go.yaml.in/yaml/v2 v2.4.3
-       golang.org/x/sync v0.17.0
-       golang.org/x/text v0.29.0
+       golang.org/x/sync v0.18.0
+       golang.org/x/text v0.31.0
        gopkg.in/evanphx/json-patch.v4 v4.13.0
        k8s.io/api v0.0.0
        k8s.io/apimachinery v0.0.0
@@ -56,10 +56,10 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        github.com/xlab/treeprint v1.2.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 49e211341eb403734166e9497eb47d816c0e65ed..de78293693858d7fcdb14edc2a00e773bcf9b3c8 100644 (file)
@@ -119,26 +119,26 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index c661842f2e63ee78b569e0309f847e3d18bcace1..a6ff7e977985cfdf161f2ddabcace35fd5e184ed 100644 (file)
@@ -18,9 +18,9 @@ require (
        github.com/spf13/pflag v1.0.9
        github.com/stretchr/testify v1.11.1
        go.uber.org/goleak v1.3.0
-       golang.org/x/net v0.43.0
+       golang.org/x/net v0.47.0
        golang.org/x/oauth2 v0.30.0
-       golang.org/x/term v0.36.0
+       golang.org/x/term v0.37.0
        golang.org/x/time v0.9.0
        google.golang.org/protobuf v1.36.8
        gopkg.in/evanphx/json-patch.v4 v4.13.0
@@ -57,8 +57,8 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
 )
index d716ff45fa0d65dc8c5c8d994c38b710c6d79fe3..11524f4f71234402c29ca6721af4467874c389b0 100644 (file)
@@ -98,25 +98,25 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index c598742cdc97629d319f6bda17c62238ede9cdcd..0aeafffdd659c1d2c6ae1b3d57677b4cece3c89d 100644 (file)
@@ -86,14 +86,14 @@ require (
        go.uber.org/zap v1.27.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/crypto v0.41.0 // indirect
+       golang.org/x/crypto v0.45.0 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
        google.golang.org/grpc v1.72.2 // indirect
index 11f5405a0bf2292ca9c39465b4f930ca842a431e..23d15287f08cbb05b4acd7df2c1fd76c70c7154e 100644 (file)
@@ -242,47 +242,47 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 9285fc488666c47b455c28b3647fd1a641560bbc..fb311dde2d2f84386fec27bd08a0d6d08d2796e2 100644 (file)
@@ -25,9 +25,9 @@ require (
        github.com/pmezard/go-difflib v1.0.0 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
-       golang.org/x/crypto v0.41.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/crypto v0.45.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
        k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
index 208a36961b5d28e5204a85116875e74eb508bc4a..a1bb96f37549a2a0ad2974e87c1555c786febc36 100644 (file)
@@ -54,18 +54,18 @@ github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcY
 go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
index eabf31945a78ef3a10d77d5b5569248ad876878a..d44d2de145b93c90dcd42db2d227272a33a4c4cb 100644 (file)
@@ -35,11 +35,11 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
index 8049f3a8fe045e43bc3c6a9ce0642f0850bb4075..0d4031a5f8ebf11ba0eae3709e796c9cb0583f0c 100644 (file)
@@ -80,24 +80,24 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
index db957e360ebc4f4ea6b7fb3007861428a042b143..b245ff00ae164626835f9f2d00b97fd86c18e34a 100644 (file)
@@ -12,7 +12,7 @@ require (
        github.com/google/go-cmp v0.7.0
        github.com/spf13/pflag v1.0.9
        go.yaml.in/yaml/v2 v2.4.3
-       golang.org/x/text v0.29.0
+       golang.org/x/text v0.31.0
        k8s.io/apimachinery v0.0.0
        k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b
        k8s.io/klog/v2 v2.130.1
@@ -38,10 +38,10 @@ require (
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/mod v0.28.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/tools v0.36.0 // indirect
+       golang.org/x/mod v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/tools v0.38.0 // indirect
        golang.org/x/tools/go/expect v0.1.1-deprecated // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 502e38429a1faed4dea883c5e3f39907bae43915..114c3154d20d92bcb727bc620f5ade8cb17a07ac 100644 (file)
@@ -90,40 +90,40 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
 golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
index 08d74d52c3ee98c4a2f594f41915890e4e9c7d48..57d105d8d04d2d0ed6ce6b032a20725d5234cb15 100644 (file)
@@ -26,8 +26,8 @@ require (
        go.opentelemetry.io/otel/trace v1.36.0
        go.uber.org/zap v1.27.0
        go.yaml.in/yaml/v2 v2.4.3
-       golang.org/x/sys v0.37.0
-       golang.org/x/text v0.29.0
+       golang.org/x/sys v0.38.0
+       golang.org/x/text v0.31.0
        k8s.io/apimachinery v0.0.0
        k8s.io/client-go v0.0.0
        k8s.io/klog/v2 v2.130.1
@@ -67,9 +67,9 @@ require (
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
index 672c06d5ac0cc38ff0761f60d4e6a26ce583c612..77517074e21d229e4f7ce1414d9b935320af4939 100644 (file)
@@ -177,26 +177,26 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index dd0032e67e04ab6b21529b291af03a5845aac75c..8f9483cc5084b278180b535fdf70410dd27662de 100644 (file)
@@ -37,11 +37,11 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
index 3574ec962ea67082325772df4c3339c192636cde..aa9915719f880fc4cb0e3fb71e6445c10da5234c 100644 (file)
@@ -89,25 +89,25 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 49249e6e7ffe2412ed7dafc3dbf0dfd53f3a9420..64b1ba503e9717ec861b4add53e5abf6b6cd2001 100644 (file)
@@ -80,13 +80,13 @@ require (
        go.uber.org/zap v1.27.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/crypto v0.41.0 // indirect
+       golang.org/x/crypto v0.45.0 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
index ef57e5948149fc821bc45a382fb5ef62563d72e8..e5fd6612b3e59b6528a98fa5f1369ef1d66373a7 100644 (file)
@@ -238,46 +238,46 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 104298f65a53264db027eb656fda2d166ee28f7f..f4f140674f779b9c515f3ba1f365b916bdc4dfbd 100644 (file)
@@ -21,9 +21,9 @@ require (
        github.com/rogpeppe/go-internal v1.14.1 // indirect
        go.opentelemetry.io/otel v1.36.0 // indirect
        go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
        gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
index 9767f52c87f24f741ba8c3e5298ec9d714e62052..97d205e5a91ea1f2d6369086f05df95f730804c1 100644 (file)
@@ -54,18 +54,18 @@ go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFw
 go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
 go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
 go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
index 0cf5fe2c4efd2df4a113e67302b97f9e03bf0dab..aaffac5ae7815f47d87a3cab90aa3d97c963e5ff 100644 (file)
@@ -13,7 +13,7 @@ require (
        go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0
        go.opentelemetry.io/otel/sdk v1.36.0
        go.opentelemetry.io/otel/trace v1.36.0
-       golang.org/x/sys v0.37.0
+       golang.org/x/sys v0.38.0
        google.golang.org/grpc v1.72.2
        k8s.io/api v0.0.0
        k8s.io/apimachinery v0.0.0
@@ -63,9 +63,9 @@ require (
        go.opentelemetry.io/proto/otlp v1.5.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
index 6f77ef583f2247b0487e9d6d2bc6affcb47a11b6..49388081278e9a41e266effcf02aca73663dbdc0 100644 (file)
@@ -166,21 +166,21 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index c7e1738ed5eed5362052a295602536908a8a8868..4f6de2ea5e1084cf874eac4bce0dd05a1bfc419b 100644 (file)
@@ -25,8 +25,8 @@ require (
        github.com/pmezard/go-difflib v1.0.0 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
        k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
index 54e5ece3e8f4978fd8b86856e9b71626370b4d1f..3fba2d0186c2b61ad15e7e810281ee638f54f45d 100644 (file)
@@ -55,17 +55,17 @@ github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcY
 go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
index 6c06f74760dfd8034002be9245deede7a31bdcdb..d9037c9383675d995782611aaa84ee77c8e0aae1 100644 (file)
@@ -62,12 +62,12 @@ require (
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
index ccbb2ea43d21e94f3dc0ba59d4a7a86da80f1b53..76fdd5f61308c42b6fbba3a5306a653ff7faad0b 100644 (file)
@@ -195,27 +195,27 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 4d33f063e2ac17e2d5d567d67d93f1e01c3258e3..61f876af59bdcda20879abbbc12d6eae13c0103b 100644 (file)
@@ -48,11 +48,11 @@ require (
        go.opentelemetry.io/otel/trace v1.36.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
index edf89fa7af5d440f01e80620a105d36ea88488dd..e538860399268a3574edc05a8345ce7edc177d53 100644 (file)
@@ -135,25 +135,25 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 468edbaf983f497711f17c1aec2b1de8c498f3a4..fde34b0ba895915b8fc3aa8c8250bf05ebb6b07b 100644 (file)
@@ -16,8 +16,8 @@ require (
        github.com/google/go-cmp v0.7.0 // indirect
        go.opentelemetry.io/otel v1.36.0 // indirect
        go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
 )
index 937e790b7a9b68a864bb3ead0a033cf8bf1d378f..4bf22c401ed67648cf6e7e8115f44d99fb2aa739 100644 (file)
@@ -39,18 +39,18 @@ go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFw
 go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
 go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
 go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
index 1e22d35d2e595967dcbf38f39d7f357409a4c592..1137ae3a11de8990b2e596c6c42581aadb7e894c 100644 (file)
@@ -16,8 +16,8 @@ require (
        github.com/google/go-cmp v0.7.0 // indirect
        go.opentelemetry.io/otel v1.36.0 // indirect
        go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
 )
index 937e790b7a9b68a864bb3ead0a033cf8bf1d378f..4bf22c401ed67648cf6e7e8115f44d99fb2aa739 100644 (file)
@@ -39,18 +39,18 @@ go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFw
 go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
 go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
 go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
index 395be15447113796ebb6b1d3f217ca877f6685ed..ceffc8939b4e8ba8d874c9a77ab434fc1bc67db5 100644 (file)
@@ -13,9 +13,9 @@ require (
        github.com/miekg/pkcs11 v1.0.3-0.20190429190417-a667d056470f // indirect
        github.com/pkg/errors v0.9.1 // indirect
        github.com/thales-e-security/pool v0.0.2 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
        google.golang.org/grpc v1.72.2 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
index 38522ddc12f8b4e9ba5d280b0eda57f35baf842d..acf9ae1d6dc2caa82e763dd5403d4b1a7f25895e 100644 (file)
@@ -36,12 +36,12 @@ go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFw
 go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
 go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
 go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
index 7c3f7f9ba9826b7c5d95fc13d68735494b8a1142..6ff5e587eaad14126cc3933bb31899dbff0cf3e7 100644 (file)
@@ -15,7 +15,7 @@ require (
        go.opentelemetry.io/otel v1.36.0
        go.opentelemetry.io/otel/sdk v1.36.0
        go.opentelemetry.io/otel/trace v1.36.0
-       golang.org/x/net v0.43.0
+       golang.org/x/net v0.47.0
        k8s.io/api v0.0.0
        k8s.io/apimachinery v0.0.0
        k8s.io/apiserver v0.0.0
@@ -88,16 +88,16 @@ require (
        go.uber.org/zap v1.27.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/crypto v0.41.0 // indirect
+       golang.org/x/crypto v0.45.0 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/mod v0.28.0 // indirect
+       golang.org/x/mod v0.29.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       golang.org/x/tools v0.36.0 // indirect
+       golang.org/x/tools v0.38.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
        google.golang.org/grpc v1.72.2 // indirect
index 1ab2633dfd32ac2bac73764234e8b211910f1091..8dbf86c9fd11a65320c65f841d07cc0bb81f109d 100644 (file)
@@ -242,47 +242,47 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
 golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
index fff9f71b99557f7b1bd4f45a9abf925d9aec528f..31cff7af049ad5173528e9bb633f0afe4b952515 100644 (file)
@@ -21,8 +21,8 @@ require (
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        k8s.io/component-base v0.0.0 // indirect
index 476830cbfe5a51d066429392e4ff7a264df63a7d..747095265ca438b790052492544e5462dc5fd5e0 100644 (file)
@@ -101,19 +101,19 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
index 400b59949e2ffae7271d67c87aa5a9cbf1d02edb..b177d7ec6961834331f2b375d6579c09052bc812 100644 (file)
@@ -35,9 +35,9 @@ require (
        go.opentelemetry.io/otel v1.36.0 // indirect
        go.opentelemetry.io/otel/trace v1.36.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
-       golang.org/x/net v0.43.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        k8s.io/klog/v2 v2.130.1 // indirect
index 96f0d4ca8b7587de245f92037fb36e3a10aaa20c..053a6e5fdf3345782e389f150bc2ac76e9c8779b 100644 (file)
@@ -108,19 +108,19 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 1f7dc868efc74478844d9d862a0c34c461bfd1ae..a2af28efe0c0532a509cabfd70756195e4ca8a2a 100644 (file)
@@ -55,12 +55,12 @@ require (
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
index f303ffe863632e6ca8f3288cf37c7629589dd55f..b85fb7c9dd52eb77cd7322ddeda7e0137317876f 100644 (file)
@@ -173,27 +173,27 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 2132316449e390f5fbdcf32c5ba1b3edb48efe91..663d44b1189b834ad2a6796e946795802aaaca36 100644 (file)
@@ -27,8 +27,8 @@ require (
        github.com/spf13/pflag v1.0.9
        github.com/stretchr/testify v1.11.1
        go.yaml.in/yaml/v2 v2.4.3
-       golang.org/x/sys v0.37.0
-       golang.org/x/text v0.29.0
+       golang.org/x/sys v0.38.0
+       golang.org/x/text v0.31.0
        gopkg.in/evanphx/json-patch.v4 v4.13.0
        k8s.io/api v0.0.0
        k8s.io/apimachinery v0.0.0
@@ -81,13 +81,13 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        github.com/xlab/treeprint v1.2.0 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/mod v0.28.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/mod v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       golang.org/x/tools v0.36.0 // indirect
+       golang.org/x/tools v0.38.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
index 4b8bdfc2b98179d819816a8e9006c5b5585bb876..77d9d5471c5ce00fbbb72c4e484c93a8a94ce45a 100644 (file)
@@ -192,27 +192,27 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 759c4870da14e7cd0cc0f63ab373ddb6e1af25cd..81cb9fd5807574e16029fe831dcff98f394811a2 100644 (file)
@@ -49,11 +49,11 @@ require (
        go.opentelemetry.io/otel v1.36.0 // indirect
        go.opentelemetry.io/otel/trace v1.36.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index 698a96b459610725421ed8a0a069c674dff94286..d8233451c2f92aeb07d8069d844ee5ba4d7bc61e 100644 (file)
@@ -175,23 +175,23 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index eb77598e3ac28199bcea146106b44e9ccde5b60d..acda179a535ad5872a74602796b18499afc4781d 100644 (file)
@@ -36,15 +36,15 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/mod v0.28.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/mod v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       golang.org/x/tools v0.36.0 // indirect
+       golang.org/x/tools v0.38.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index bac6b344ca0f4c53748cb5e7b8ea1661502ee4b6..6da7eb1a2a06152cd34d286a9167473949e09760 100644 (file)
@@ -90,26 +90,26 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
 golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
index 66f2eceadd02d3036860eb32328d415dd60e2165..86b06e8c971f0da9c49d5a69b00ac535d475fe85 100644 (file)
@@ -9,7 +9,7 @@ godebug default=go1.25
 require (
        github.com/moby/sys/mountinfo v0.7.2
        github.com/stretchr/testify v1.11.1
-       golang.org/x/sys v0.37.0
+       golang.org/x/sys v0.38.0
        k8s.io/klog/v2 v2.130.1
        k8s.io/utils v0.0.0-20251002143259-bc988d571ff4
 )
index e539975396e4002304f6731895175bacb2546c2a..0ff8e227abd5b14d86cf684bdfc5b1a23b3be7a4 100644 (file)
@@ -22,8 +22,8 @@ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/
 github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
 github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
 golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
index e0aa903cccc4adfd8f3b624214cac680dcdd6bb8..0f6c7746f909e2e2bb426d9d9dd86693244cafde 100644 (file)
@@ -82,14 +82,14 @@ require (
        go.uber.org/zap v1.27.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/crypto v0.41.0 // indirect
+       golang.org/x/crypto v0.45.0 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
index ef57e5948149fc821bc45a382fb5ef62563d72e8..e5fd6612b3e59b6528a98fa5f1369ef1d66373a7 100644 (file)
@@ -238,46 +238,46 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 155593ba59eb653bb6e1b0f40f9217aa89ce7ec3..caf47b7fee2773a1b085eb16636b419613191413 100644 (file)
@@ -82,17 +82,17 @@ require (
        go.uber.org/zap v1.27.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/crypto v0.41.0 // indirect
+       golang.org/x/crypto v0.45.0 // indirect
        golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
-       golang.org/x/mod v0.28.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/mod v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
-       golang.org/x/tools v0.36.0 // indirect
+       golang.org/x/tools v0.38.0 // indirect
        google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect
        google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect
        google.golang.org/grpc v1.72.2 // indirect
index 3f53acc305c7195b05ab5241ce865b657e3296c3..3c3f0c582468fa6b8dcfa345ca595aefc221d7d5 100644 (file)
@@ -239,47 +239,47 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
 golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
index 0528fe590649679ece9deab09f26b534e2c7bcbb..d886f048698b1f7726806d098660417da32fb7d2 100644 (file)
@@ -43,12 +43,12 @@ require (
        github.com/xlab/treeprint v1.2.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.9.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
index 49e211341eb403734166e9497eb47d816c0e65ed..de78293693858d7fcdb14edc2a00e773bcf9b3c8 100644 (file)
@@ -119,26 +119,26 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
index 458912472af1fea937a6314ba05537f03d100533..0bf29457609c70dd13a70364c211abcf81c0da71 100644 (file)
@@ -38,14 +38,14 @@ require (
        github.com/x448/float16 v0.8.4 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/mod v0.28.0 // indirect
-       golang.org/x/net v0.43.0 // indirect
+       golang.org/x/mod v0.29.0 // indirect
+       golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sync v0.17.0 // indirect
-       golang.org/x/sys v0.37.0 // indirect
-       golang.org/x/term v0.36.0 // indirect
-       golang.org/x/text v0.29.0 // indirect
-       golang.org/x/tools v0.36.0 // indirect
+       golang.org/x/sync v0.18.0 // indirect
+       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/term v0.37.0 // indirect
+       golang.org/x/text v0.31.0 // indirect
+       golang.org/x/tools v0.38.0 // indirect
        google.golang.org/protobuf v1.36.8 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
index c114f36e2fbb9ca39c0c529f4152724cdb352bd6..ffa375696615a873bcb59dc8b0258dccb57672cb 100644 (file)
@@ -91,26 +91,26 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
-golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
-golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20251008203120-078029d740a8/go.mod h1:Pi4ztBfryZoJEkyFTI5/Ocsu2jXyDr6iSdgJiYE/uwE=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
-golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
 golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
index 7dd2638e88ada9e1251a40d5fae679275b62fe50..769af387e2e5f1f60aba40949a974e076337b837 100644 (file)
@@ -29,7 +29,7 @@ loop:
        MOVD    $NUM_ROUNDS, R21
        VLD1    (R11), [V30.S4, V31.S4]
 
-       // load contants
+       // load constants
        // VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4]
        WORD    $0x4D60E940
 
index 21ca3b2ee4b99a5df0d7d98615f8a53bb84a271b..048faef3a5dcc0751a3e0aefeef7d029e1f9f0c6 100644 (file)
@@ -3,11 +3,14 @@
 // license that can be found in the LICENSE file.
 
 // Package curve25519 provides an implementation of the X25519 function, which
-// performs scalar multiplication on the elliptic curve known as Curve25519.
-// See RFC 7748.
+// performs scalar multiplication on the elliptic curve known as Curve25519
+// according to [RFC 7748].
 //
-// This package is a wrapper for the X25519 implementation
-// in the crypto/ecdh package.
+// The curve25519 package is a wrapper for the X25519 implementation in the
+// crypto/ecdh package. It is [frozen] and is not accepting new features.
+//
+// [RFC 7748]: https://datatracker.ietf.org/doc/html/rfc7748
+// [frozen]: https://go.dev/wiki/Frozen
 package curve25519
 
 import "crypto/ecdh"
@@ -36,7 +39,7 @@ func ScalarBaseMult(dst, scalar *[32]byte) {
        curve := ecdh.X25519()
        priv, err := curve.NewPrivateKey(scalar[:])
        if err != nil {
-               panic("curve25519: internal error: scalarBaseMult was not 32 bytes")
+               panic("curve25519: " + err.Error())
        }
        copy(dst[:], priv.PublicKey().Bytes())
 }
index 59b3a95a7d20fa0fdb40c0686679e82f9d3e25e8..df453dcce08787c65a2779936f68148de106627d 100644 (file)
@@ -2,16 +2,19 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package ed25519 implements the Ed25519 signature algorithm. See
-// https://ed25519.cr.yp.to/.
+// Package ed25519 implements the Ed25519 signature algorithm.
 //
 // These functions are also compatible with the “Ed25519” function defined in
-// RFC 8032. However, unlike RFC 8032's formulation, this package's private key
+// [RFC 8032]. However, unlike RFC 8032's formulation, this package's private key
 // representation includes a public key suffix to make multiple signing
 // operations with the same key more efficient. This package refers to the RFC
 // 8032 private key as the “seed”.
 //
-// This package is a wrapper around the standard library crypto/ed25519 package.
+// The ed25519 package is a wrapper for the Ed25519 implementation in the
+// crypto/ed25519 package. It is [frozen] and is not accepting new features.
+//
+// [RFC 8032]: https://datatracker.ietf.org/doc/html/rfc8032
+// [frozen]: https://go.dev/wiki/Frozen
 package ed25519
 
 import (
index 3685b344587305fed8cff824f7725982369e4c2a..75df77406d61f9045b29414ab792b40c4b8bc87f 100644 (file)
@@ -3,6 +3,10 @@
 // license that can be found in the LICENSE file.
 
 // Package salsa provides low-level access to functions in the Salsa family.
+//
+// Deprecated: this package exposes unsafe low-level operations. New applications
+// should consider using the AEAD construction in golang.org/x/crypto/chacha20poly1305
+// instead. Existing users should migrate to golang.org/x/crypto/salsa20.
 package salsa
 
 import "math/bits"
index 6a5b582aa91e19b9b1d4bcb707ce299c4f4ca590..7554ed57a991851e6005754dcebcaa62487e8bb0 100644 (file)
@@ -8,6 +8,7 @@ import (
        "crypto/aes"
        "crypto/cipher"
        "crypto/des"
+       "crypto/fips140"
        "crypto/rc4"
        "crypto/subtle"
        "encoding/binary"
@@ -15,6 +16,7 @@ import (
        "fmt"
        "hash"
        "io"
+       "slices"
 
        "golang.org/x/crypto/chacha20"
        "golang.org/x/crypto/internal/poly1305"
@@ -93,41 +95,41 @@ func streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream,
 }
 
 // cipherModes documents properties of supported ciphers. Ciphers not included
-// are not supported and will not be negotiated, even if explicitly requested in
-// ClientConfig.Crypto.Ciphers.
-var cipherModes = map[string]*cipherMode{
-       // Ciphers from RFC 4344, which introduced many CTR-based ciphers. Algorithms
-       // are defined in the order specified in the RFC.
-       CipherAES128CTR: {16, aes.BlockSize, streamCipherMode(0, newAESCTR)},
-       CipherAES192CTR: {24, aes.BlockSize, streamCipherMode(0, newAESCTR)},
-       CipherAES256CTR: {32, aes.BlockSize, streamCipherMode(0, newAESCTR)},
-
-       // Ciphers from RFC 4345, which introduces security-improved arcfour ciphers.
-       // They are defined in the order specified in the RFC.
-       InsecureCipherRC4128: {16, 0, streamCipherMode(1536, newRC4)},
-       InsecureCipherRC4256: {32, 0, streamCipherMode(1536, newRC4)},
-
-       // Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol.
-       // Note that this cipher is not safe, as stated in RFC 4253: "Arcfour (and
-       // RC4) has problems with weak keys, and should be used with caution."
-       // RFC 4345 introduces improved versions of Arcfour.
-       InsecureCipherRC4: {16, 0, streamCipherMode(0, newRC4)},
-
-       // AEAD ciphers
-       CipherAES128GCM:        {16, 12, newGCMCipher},
-       CipherAES256GCM:        {32, 12, newGCMCipher},
-       CipherChaCha20Poly1305: {64, 0, newChaCha20Cipher},
-
+// are not supported and will not be negotiated, even if explicitly configured.
+// When FIPS mode is enabled, only FIPS-approved algorithms are included.
+var cipherModes = map[string]*cipherMode{}
+
+func init() {
+       cipherModes[CipherAES128CTR] = &cipherMode{16, aes.BlockSize, streamCipherMode(0, newAESCTR)}
+       cipherModes[CipherAES192CTR] = &cipherMode{24, aes.BlockSize, streamCipherMode(0, newAESCTR)}
+       cipherModes[CipherAES256CTR] = &cipherMode{32, aes.BlockSize, streamCipherMode(0, newAESCTR)}
+       //  Use of GCM with arbitrary IVs is not allowed in FIPS 140-only mode,
+       // we'll wire it up to NewGCMForSSH in Go 1.26.
+       //
+       // For now it means we'll work with fips140=on but not fips140=only.
+       cipherModes[CipherAES128GCM] = &cipherMode{16, 12, newGCMCipher}
+       cipherModes[CipherAES256GCM] = &cipherMode{32, 12, newGCMCipher}
+
+       if fips140.Enabled() {
+               defaultCiphers = slices.DeleteFunc(defaultCiphers, func(algo string) bool {
+                       _, ok := cipherModes[algo]
+                       return !ok
+               })
+               return
+       }
+
+       cipherModes[CipherChaCha20Poly1305] = &cipherMode{64, 0, newChaCha20Cipher}
+       // Insecure ciphers not included in the default configuration.
+       cipherModes[InsecureCipherRC4128] = &cipherMode{16, 0, streamCipherMode(1536, newRC4)}
+       cipherModes[InsecureCipherRC4256] = &cipherMode{32, 0, streamCipherMode(1536, newRC4)}
+       cipherModes[InsecureCipherRC4] = &cipherMode{16, 0, streamCipherMode(0, newRC4)}
        // CBC mode is insecure and so is not included in the default config.
        // (See https://www.ieee-security.org/TC/SP2013/papers/4977a526.pdf). If absolutely
        // needed, it's possible to specify a custom Config to enable it.
        // You should expect that an active attacker can recover plaintext if
        // you do.
-       InsecureCipherAES128CBC: {16, aes.BlockSize, newAESCBCCipher},
-
-       // 3des-cbc is insecure and is not included in the default
-       // config.
-       InsecureCipherTripleDESCBC: {24, des.BlockSize, newTripleDESCBCCipher},
+       cipherModes[InsecureCipherAES128CBC] = &cipherMode{16, aes.BlockSize, newAESCBCCipher}
+       cipherModes[InsecureCipherTripleDESCBC] = &cipherMode{24, des.BlockSize, newTripleDESCBCCipher}
 }
 
 // prefixLen is the length of the packet prefix that contains the packet length
index c12818fdc5c7e4d34e4c179bb6068806b062de74..3127e4990363c34b3fbab983f8b097db9db1d583 100644 (file)
@@ -9,6 +9,7 @@ import (
        "errors"
        "fmt"
        "io"
+       "slices"
        "strings"
 )
 
@@ -83,7 +84,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error {
                        // success
                        return nil
                } else if ok == authFailure {
-                       if m := auth.method(); !contains(tried, m) {
+                       if m := auth.method(); !slices.Contains(tried, m) {
                                tried = append(tried, m)
                        }
                }
@@ -97,7 +98,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error {
        findNext:
                for _, a := range config.Auth {
                        candidateMethod := a.method()
-                       if contains(tried, candidateMethod) {
+                       if slices.Contains(tried, candidateMethod) {
                                continue
                        }
                        for _, meth := range methods {
@@ -117,15 +118,6 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error {
        return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", tried)
 }
 
-func contains(list []string, e string) bool {
-       for _, s := range list {
-               if s == e {
-                       return true
-               }
-       }
-       return false
-}
-
 // An AuthMethod represents an instance of an RFC 4252 authentication method.
 type AuthMethod interface {
        // auth authenticates user over transport t.
@@ -255,7 +247,7 @@ func pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (MultiA
                // Fallback to use if there is no "server-sig-algs" extension or a
                // common algorithm cannot be found. We use the public key format if the
                // MultiAlgorithmSigner supports it, otherwise we return an error.
-               if !contains(as.Algorithms(), underlyingAlgo(keyFormat)) {
+               if !slices.Contains(as.Algorithms(), underlyingAlgo(keyFormat)) {
                        return "", fmt.Errorf("ssh: no common public key signature algorithm, server only supports %q for key type %q, signer only supports %v",
                                underlyingAlgo(keyFormat), keyFormat, as.Algorithms())
                }
@@ -284,7 +276,7 @@ func pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (MultiA
        // Filter algorithms based on those supported by MultiAlgorithmSigner.
        var keyAlgos []string
        for _, algo := range algorithmsForKeyFormat(keyFormat) {
-               if contains(as.Algorithms(), underlyingAlgo(algo)) {
+               if slices.Contains(as.Algorithms(), underlyingAlgo(algo)) {
                        keyAlgos = append(keyAlgos, algo)
                }
        }
@@ -334,7 +326,7 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand
                // the key try to use the obtained algorithm as if "server-sig-algs" had
                // not been implemented if supported from the algorithm signer.
                if !ok && idx < origSignersLen && isRSACert(algo) && algo != CertAlgoRSAv01 {
-                       if contains(as.Algorithms(), KeyAlgoRSA) {
+                       if slices.Contains(as.Algorithms(), KeyAlgoRSA) {
                                // We retry using the compat algorithm after all signers have
                                // been tried normally.
                                signers = append(signers, &multiAlgorithmSigner{
@@ -385,7 +377,7 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand
                // contain the "publickey" method, do not attempt to authenticate with any
                // other keys.  According to RFC 4252 Section 7, the latter can occur when
                // additional authentication methods are required.
-               if success == authSuccess || !contains(methods, cb.method()) {
+               if success == authSuccess || !slices.Contains(methods, cb.method()) {
                        return success, methods, err
                }
        }
@@ -434,7 +426,7 @@ func confirmKeyAck(key PublicKey, c packetConn) (bool, error) {
                        // servers send the key type instead. OpenSSH allows any algorithm
                        // that matches the public key, so we do the same.
                        // https://github.com/openssh/openssh-portable/blob/86bdd385/sshconnect2.c#L709
-                       if !contains(algorithmsForKeyFormat(key.Type()), msg.Algo) {
+                       if !slices.Contains(algorithmsForKeyFormat(key.Type()), msg.Algo) {
                                return false, nil
                        }
                        if !bytes.Equal(msg.PubKey, pubKey) {
index f2ec0896c2931021449a258a92f17356c166ed8c..2e44e9c9ec620efbdf847e9fd86998080ac1ab2e 100644 (file)
@@ -6,6 +6,7 @@ package ssh
 
 import (
        "crypto"
+       "crypto/fips140"
        "crypto/rand"
        "fmt"
        "io"
@@ -83,6 +84,7 @@ var (
        // supportedKexAlgos specifies key-exchange algorithms implemented by this
        // package in preference order, excluding those with security issues.
        supportedKexAlgos = []string{
+               KeyExchangeMLKEM768X25519,
                KeyExchangeCurve25519,
                KeyExchangeECDHP256,
                KeyExchangeECDHP384,
@@ -94,6 +96,7 @@ var (
        // defaultKexAlgos specifies the default preference for key-exchange
        // algorithms in preference order.
        defaultKexAlgos = []string{
+               KeyExchangeMLKEM768X25519,
                KeyExchangeCurve25519,
                KeyExchangeECDHP256,
                KeyExchangeECDHP384,
@@ -254,6 +257,40 @@ type Algorithms struct {
        PublicKeyAuths []string
 }
 
+func init() {
+       if fips140.Enabled() {
+               defaultHostKeyAlgos = slices.DeleteFunc(defaultHostKeyAlgos, func(algo string) bool {
+                       _, err := hashFunc(underlyingAlgo(algo))
+                       return err != nil
+               })
+               defaultPubKeyAuthAlgos = slices.DeleteFunc(defaultPubKeyAuthAlgos, func(algo string) bool {
+                       _, err := hashFunc(underlyingAlgo(algo))
+                       return err != nil
+               })
+       }
+}
+
+func hashFunc(format string) (crypto.Hash, error) {
+       switch format {
+       case KeyAlgoRSASHA256, KeyAlgoECDSA256, KeyAlgoSKED25519, KeyAlgoSKECDSA256:
+               return crypto.SHA256, nil
+       case KeyAlgoECDSA384:
+               return crypto.SHA384, nil
+       case KeyAlgoRSASHA512, KeyAlgoECDSA521:
+               return crypto.SHA512, nil
+       case KeyAlgoED25519:
+               // KeyAlgoED25519 doesn't pre-hash.
+               return 0, nil
+       case KeyAlgoRSA, InsecureKeyAlgoDSA:
+               if fips140.Enabled() {
+                       return 0, fmt.Errorf("ssh: hash algorithm for format %q not allowed in FIPS 140 mode", format)
+               }
+               return crypto.SHA1, nil
+       default:
+               return 0, fmt.Errorf("ssh: hash algorithm for format %q not mapped", format)
+       }
+}
+
 // SupportedAlgorithms returns algorithms currently implemented by this package,
 // excluding those with security issues, which are returned by
 // InsecureAlgorithms. The algorithms listed here are in preference order.
@@ -281,21 +318,6 @@ func InsecureAlgorithms() Algorithms {
 
 var supportedCompressions = []string{compressionNone}
 
-// hashFuncs keeps the mapping of supported signature algorithms to their
-// respective hashes needed for signing and verification.
-var hashFuncs = map[string]crypto.Hash{
-       KeyAlgoRSA:         crypto.SHA1,
-       KeyAlgoRSASHA256:   crypto.SHA256,
-       KeyAlgoRSASHA512:   crypto.SHA512,
-       InsecureKeyAlgoDSA: crypto.SHA1,
-       KeyAlgoECDSA256:    crypto.SHA256,
-       KeyAlgoECDSA384:    crypto.SHA384,
-       KeyAlgoECDSA521:    crypto.SHA512,
-       // KeyAlgoED25519 doesn't pre-hash.
-       KeyAlgoSKECDSA256: crypto.SHA256,
-       KeyAlgoSKED25519:  crypto.SHA256,
-}
-
 // algorithmsForKeyFormat returns the supported signature algorithms for a given
 // public key format (PublicKey.Type), in order of preference. See RFC 8332,
 // Section 2. See also the note in sendKexInit on backwards compatibility.
@@ -310,11 +332,40 @@ func algorithmsForKeyFormat(keyFormat string) []string {
        }
 }
 
+// keyFormatForAlgorithm returns the key format corresponding to the given
+// signature algorithm. It returns an empty string if the signature algorithm is
+// invalid or unsupported.
+func keyFormatForAlgorithm(sigAlgo string) string {
+       switch sigAlgo {
+       case KeyAlgoRSA, KeyAlgoRSASHA256, KeyAlgoRSASHA512:
+               return KeyAlgoRSA
+       case CertAlgoRSAv01, CertAlgoRSASHA256v01, CertAlgoRSASHA512v01:
+               return CertAlgoRSAv01
+       case KeyAlgoED25519,
+               KeyAlgoSKED25519,
+               KeyAlgoSKECDSA256,
+               KeyAlgoECDSA256,
+               KeyAlgoECDSA384,
+               KeyAlgoECDSA521,
+               InsecureKeyAlgoDSA,
+               InsecureCertAlgoDSAv01,
+               CertAlgoECDSA256v01,
+               CertAlgoECDSA384v01,
+               CertAlgoECDSA521v01,
+               CertAlgoSKECDSA256v01,
+               CertAlgoED25519v01,
+               CertAlgoSKED25519v01:
+               return sigAlgo
+       default:
+               return ""
+       }
+}
+
 // isRSA returns whether algo is a supported RSA algorithm, including certificate
 // algorithms.
 func isRSA(algo string) bool {
        algos := algorithmsForKeyFormat(KeyAlgoRSA)
-       return contains(algos, underlyingAlgo(algo))
+       return slices.Contains(algos, underlyingAlgo(algo))
 }
 
 func isRSACert(algo string) bool {
@@ -513,7 +564,7 @@ func (c *Config) SetDefaults() {
                if kexAlgoMap[k] != nil {
                        // Ignore the KEX if we have no kexAlgoMap definition.
                        kexs = append(kexs, k)
-                       if k == KeyExchangeCurve25519 && !contains(c.KeyExchanges, keyExchangeCurve25519LibSSH) {
+                       if k == KeyExchangeCurve25519 && !slices.Contains(c.KeyExchanges, keyExchangeCurve25519LibSSH) {
                                kexs = append(kexs, keyExchangeCurve25519LibSSH)
                        }
                }
index 04ccce346176c4d95bf00abfd09c2506e9a7348e..5b4de9effcb1351bea71fb455716e722b5044a36 100644 (file)
@@ -17,8 +17,18 @@ References:
        [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD
        [SSH-PARAMETERS]:    http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1
        [SSH-CERTS]:    https://datatracker.ietf.org/doc/html/draft-miller-ssh-cert-01
+       [FIPS 140-3 mode]: https://go.dev/doc/security/fips140
 
 This package does not fall under the stability promise of the Go language itself,
 so its API may be changed when pressing needs arise.
+
+# FIPS 140-3 mode
+
+When the program is in [FIPS 140-3 mode], this package behaves as if only SP
+800-140C and SP 800-140D approved cipher suites, signature algorithms,
+certificate public key types and sizes, and key exchange and derivation
+algorithms were implemented. Others are silently ignored and not negotiated, or
+rejected. This set may depend on the algorithms supported by the FIPS 140-3 Go
+Cryptographic Module selected with GOFIPS140, and may change across Go versions.
 */
 package ssh
index a90bfe331c8cd449d880a23b7afb0f02509dc5cf..4be3cbb6de310ed70135272a9783fcfb2f12fc93 100644 (file)
@@ -10,6 +10,7 @@ import (
        "io"
        "log"
        "net"
+       "slices"
        "strings"
        "sync"
 )
@@ -527,7 +528,7 @@ func (t *handshakeTransport) sendKexInit() error {
                        switch s := k.(type) {
                        case MultiAlgorithmSigner:
                                for _, algo := range algorithmsForKeyFormat(keyFormat) {
-                                       if contains(s.Algorithms(), underlyingAlgo(algo)) {
+                                       if slices.Contains(s.Algorithms(), underlyingAlgo(algo)) {
                                                msg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, algo)
                                        }
                                }
@@ -679,7 +680,7 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error {
                return err
        }
 
-       if t.sessionID == nil && ((isClient && contains(serverInit.KexAlgos, kexStrictServer)) || (!isClient && contains(clientInit.KexAlgos, kexStrictClient))) {
+       if t.sessionID == nil && ((isClient && slices.Contains(serverInit.KexAlgos, kexStrictServer)) || (!isClient && slices.Contains(clientInit.KexAlgos, kexStrictClient))) {
                t.strictMode = true
                if err := t.conn.setStrictMode(); err != nil {
                        return err
@@ -736,7 +737,7 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error {
        // On the server side, after the first SSH_MSG_NEWKEYS, send a SSH_MSG_EXT_INFO
        // message with the server-sig-algs extension if the client supports it. See
        // RFC 8308, Sections 2.4 and 3.1, and [PROTOCOL], Section 1.9.
-       if !isClient && firstKeyExchange && contains(clientInit.KexAlgos, "ext-info-c") {
+       if !isClient && firstKeyExchange && slices.Contains(clientInit.KexAlgos, "ext-info-c") {
                supportedPubKeyAuthAlgosList := strings.Join(t.publicKeyAuthAlgorithms, ",")
                extInfo := &extInfoMsg{
                        NumExtensions: 2,
@@ -790,7 +791,7 @@ func (a algorithmSignerWrapper) SignWithAlgorithm(rand io.Reader, data []byte, a
 func pickHostKey(hostKeys []Signer, algo string) AlgorithmSigner {
        for _, k := range hostKeys {
                if s, ok := k.(MultiAlgorithmSigner); ok {
-                       if !contains(s.Algorithms(), underlyingAlgo(algo)) {
+                       if !slices.Contains(s.Algorithms(), underlyingAlgo(algo)) {
                                continue
                        }
                }
index cf388a92aa3a19f77d77ab76790bac75f16447e4..5f7fdd85142f7eb688bfaa1acecd90805871b127 100644 (file)
@@ -8,13 +8,14 @@ import (
        "crypto"
        "crypto/ecdsa"
        "crypto/elliptic"
+       "crypto/fips140"
        "crypto/rand"
-       "crypto/subtle"
        "encoding/binary"
        "errors"
        "fmt"
        "io"
        "math/big"
+       "slices"
 
        "golang.org/x/crypto/curve25519"
 )
@@ -396,9 +397,27 @@ func ecHash(curve elliptic.Curve) crypto.Hash {
        return crypto.SHA512
 }
 
+// kexAlgoMap defines the supported KEXs. KEXs not included are not supported
+// and will not be negotiated, even if explicitly configured. When FIPS mode is
+// enabled, only FIPS-approved algorithms are included.
 var kexAlgoMap = map[string]kexAlgorithm{}
 
 func init() {
+       // mlkem768x25519-sha256 we'll work with fips140=on but not fips140=only
+       // until Go 1.26.
+       kexAlgoMap[KeyExchangeMLKEM768X25519] = &mlkem768WithCurve25519sha256{}
+       kexAlgoMap[KeyExchangeECDHP521] = &ecdh{elliptic.P521()}
+       kexAlgoMap[KeyExchangeECDHP384] = &ecdh{elliptic.P384()}
+       kexAlgoMap[KeyExchangeECDHP256] = &ecdh{elliptic.P256()}
+
+       if fips140.Enabled() {
+               defaultKexAlgos = slices.DeleteFunc(defaultKexAlgos, func(algo string) bool {
+                       _, ok := kexAlgoMap[algo]
+                       return !ok
+               })
+               return
+       }
+
        p, _ := new(big.Int).SetString(oakleyGroup2, 16)
        kexAlgoMap[InsecureKeyExchangeDH1SHA1] = &dhGroup{
                g:        new(big.Int).SetInt64(2),
@@ -432,9 +451,6 @@ func init() {
                hashFunc: crypto.SHA512,
        }
 
-       kexAlgoMap[KeyExchangeECDHP521] = &ecdh{elliptic.P521()}
-       kexAlgoMap[KeyExchangeECDHP384] = &ecdh{elliptic.P384()}
-       kexAlgoMap[KeyExchangeECDHP256] = &ecdh{elliptic.P256()}
        kexAlgoMap[KeyExchangeCurve25519] = &curve25519sha256{}
        kexAlgoMap[keyExchangeCurve25519LibSSH] = &curve25519sha256{}
        kexAlgoMap[InsecureKeyExchangeDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1}
@@ -454,15 +470,17 @@ func (kp *curve25519KeyPair) generate(rand io.Reader) error {
        if _, err := io.ReadFull(rand, kp.priv[:]); err != nil {
                return err
        }
-       curve25519.ScalarBaseMult(&kp.pub, &kp.priv)
+       p, err := curve25519.X25519(kp.priv[:], curve25519.Basepoint)
+       if err != nil {
+               return fmt.Errorf("curve25519: %w", err)
+       }
+       if len(p) != 32 {
+               return fmt.Errorf("curve25519: internal error: X25519 returned %d bytes, expected 32", len(p))
+       }
+       copy(kp.pub[:], p)
        return nil
 }
 
-// curve25519Zeros is just an array of 32 zero bytes so that we have something
-// convenient to compare against in order to reject curve25519 points with the
-// wrong order.
-var curve25519Zeros [32]byte
-
 func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {
        var kp curve25519KeyPair
        if err := kp.generate(rand); err != nil {
@@ -485,11 +503,9 @@ func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handsh
                return nil, errors.New("ssh: peer's curve25519 public value has wrong length")
        }
 
-       var servPub, secret [32]byte
-       copy(servPub[:], reply.EphemeralPubKey)
-       curve25519.ScalarMult(&secret, &kp.priv, &servPub)
-       if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {
-               return nil, errors.New("ssh: peer's curve25519 public value has wrong order")
+       secret, err := curve25519.X25519(kp.priv[:], reply.EphemeralPubKey)
+       if err != nil {
+               return nil, fmt.Errorf("ssh: peer's curve25519 public value is not valid: %w", err)
        }
 
        h := crypto.SHA256.New()
@@ -531,11 +547,9 @@ func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handsh
                return nil, err
        }
 
-       var clientPub, secret [32]byte
-       copy(clientPub[:], kexInit.ClientPubKey)
-       curve25519.ScalarMult(&secret, &kp.priv, &clientPub)
-       if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {
-               return nil, errors.New("ssh: peer's curve25519 public value has wrong order")
+       secret, err := curve25519.X25519(kp.priv[:], kexInit.ClientPubKey)
+       if err != nil {
+               return nil, fmt.Errorf("ssh: peer's curve25519 public value is not valid: %w", err)
        }
 
        hostKeyBytes := priv.PublicKey().Marshal()
index a28c0de503321df741249508bf4bcd88afbe8695..47a07539d90ce13ab3813d06bb85613ec15e2015 100644 (file)
@@ -27,6 +27,7 @@ import (
        "fmt"
        "io"
        "math/big"
+       "slices"
        "strings"
 
        "golang.org/x/crypto/ssh/internal/bcrypt_pbkdf"
@@ -89,6 +90,11 @@ func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err err
                }
                return cert, nil, nil
        }
+       if keyFormat := keyFormatForAlgorithm(algo); keyFormat != "" {
+               return nil, nil, fmt.Errorf("ssh: signature algorithm %q isn't a key format; key is malformed and should be re-encoded with type %q",
+                       algo, keyFormat)
+       }
+
        return nil, nil, fmt.Errorf("ssh: unknown key algorithm: %v", algo)
 }
 
@@ -191,9 +197,10 @@ func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey
        return "", nil, nil, "", nil, io.EOF
 }
 
-// ParseAuthorizedKey parses a public key from an authorized_keys
-// file used in OpenSSH according to the sshd(8) manual page.
+// ParseAuthorizedKey parses a public key from an authorized_keys file used in
+// OpenSSH according to the sshd(8) manual page. Invalid lines are ignored.
 func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) {
+       var lastErr error
        for len(in) > 0 {
                end := bytes.IndexByte(in, '\n')
                if end != -1 {
@@ -222,6 +229,8 @@ func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []str
 
                if out, comment, err = parseAuthorizedKey(in[i:]); err == nil {
                        return out, comment, options, rest, nil
+               } else {
+                       lastErr = err
                }
 
                // No key type recognised. Maybe there's an options field at
@@ -264,12 +273,18 @@ func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []str
                if out, comment, err = parseAuthorizedKey(in[i:]); err == nil {
                        options = candidateOptions
                        return out, comment, options, rest, nil
+               } else {
+                       lastErr = err
                }
 
                in = rest
                continue
        }
 
+       if lastErr != nil {
+               return nil, "", nil, nil, fmt.Errorf("ssh: no key found; last parsing error for ignored line: %w", lastErr)
+       }
+
        return nil, "", nil, nil, errors.New("ssh: no key found")
 }
 
@@ -395,11 +410,11 @@ func NewSignerWithAlgorithms(signer AlgorithmSigner, algorithms []string) (Multi
        }
 
        for _, algo := range algorithms {
-               if !contains(supportedAlgos, algo) {
+               if !slices.Contains(supportedAlgos, algo) {
                        return nil, fmt.Errorf("ssh: algorithm %q is not supported for key type %q",
                                algo, signer.PublicKey().Type())
                }
-               if !contains(signerAlgos, algo) {
+               if !slices.Contains(signerAlgos, algo) {
                        return nil, fmt.Errorf("ssh: algorithm %q is restricted for the provided signer", algo)
                }
        }
@@ -486,10 +501,13 @@ func (r *rsaPublicKey) Marshal() []byte {
 
 func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error {
        supportedAlgos := algorithmsForKeyFormat(r.Type())
-       if !contains(supportedAlgos, sig.Format) {
+       if !slices.Contains(supportedAlgos, sig.Format) {
                return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, r.Type())
        }
-       hash := hashFuncs[sig.Format]
+       hash, err := hashFunc(sig.Format)
+       if err != nil {
+               return err
+       }
        h := hash.New()
        h.Write(data)
        digest := h.Sum(nil)
@@ -606,7 +624,11 @@ func (k *dsaPublicKey) Verify(data []byte, sig *Signature) error {
        if sig.Format != k.Type() {
                return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
        }
-       h := hashFuncs[sig.Format].New()
+       hash, err := hashFunc(sig.Format)
+       if err != nil {
+               return err
+       }
+       h := hash.New()
        h.Write(data)
        digest := h.Sum(nil)
 
@@ -651,7 +673,11 @@ func (k *dsaPrivateKey) SignWithAlgorithm(rand io.Reader, data []byte, algorithm
                return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm)
        }
 
-       h := hashFuncs[k.PublicKey().Type()].New()
+       hash, err := hashFunc(k.PublicKey().Type())
+       if err != nil {
+               return nil, err
+       }
+       h := hash.New()
        h.Write(data)
        digest := h.Sum(nil)
        r, s, err := dsa.Sign(rand, k.PrivateKey, digest)
@@ -801,8 +827,11 @@ func (k *ecdsaPublicKey) Verify(data []byte, sig *Signature) error {
        if sig.Format != k.Type() {
                return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
        }
-
-       h := hashFuncs[sig.Format].New()
+       hash, err := hashFunc(sig.Format)
+       if err != nil {
+               return err
+       }
+       h := hash.New()
        h.Write(data)
        digest := h.Sum(nil)
 
@@ -905,8 +934,11 @@ func (k *skECDSAPublicKey) Verify(data []byte, sig *Signature) error {
        if sig.Format != k.Type() {
                return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type())
        }
-
-       h := hashFuncs[sig.Format].New()
+       hash, err := hashFunc(sig.Format)
+       if err != nil {
+               return err
+       }
+       h := hash.New()
        h.Write([]byte(k.application))
        appDigest := h.Sum(nil)
 
@@ -1009,7 +1041,11 @@ func (k *skEd25519PublicKey) Verify(data []byte, sig *Signature) error {
                return fmt.Errorf("invalid size %d for Ed25519 public key", l)
        }
 
-       h := hashFuncs[sig.Format].New()
+       hash, err := hashFunc(sig.Format)
+       if err != nil {
+               return err
+       }
+       h := hash.New()
        h.Write([]byte(k.application))
        appDigest := h.Sum(nil)
 
@@ -1112,11 +1148,14 @@ func (s *wrappedSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm
                algorithm = s.pubKey.Type()
        }
 
-       if !contains(s.Algorithms(), algorithm) {
+       if !slices.Contains(s.Algorithms(), algorithm) {
                return nil, fmt.Errorf("ssh: unsupported signature algorithm %q for key format %q", algorithm, s.pubKey.Type())
        }
 
-       hashFunc := hashFuncs[algorithm]
+       hashFunc, err := hashFunc(algorithm)
+       if err != nil {
+               return nil, err
+       }
        var digest []byte
        if hashFunc != 0 {
                h := hashFunc.New()
@@ -1451,6 +1490,7 @@ type openSSHEncryptedPrivateKey struct {
        NumKeys      uint32
        PubKey       []byte
        PrivKeyBlock []byte
+       Rest         []byte `ssh:"rest"`
 }
 
 type openSSHPrivateKey struct {
index de2639d57f877c9c156fc7e2f1c1f89eed082250..87d626fbbf7cc003e052efa79a83ef8de98a8f95 100644 (file)
@@ -7,11 +7,13 @@ package ssh
 // Message authentication support
 
 import (
+       "crypto/fips140"
        "crypto/hmac"
        "crypto/sha1"
        "crypto/sha256"
        "crypto/sha512"
        "hash"
+       "slices"
 )
 
 type macMode struct {
@@ -46,23 +48,37 @@ func (t truncatingMAC) Size() int {
 
 func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() }
 
-var macModes = map[string]*macMode{
-       HMACSHA512ETM: {64, true, func(key []byte) hash.Hash {
+// macModes defines the supported MACs. MACs not included are not supported
+// and will not be negotiated, even if explicitly configured. When FIPS mode is
+// enabled, only FIPS-approved algorithms are included.
+var macModes = map[string]*macMode{}
+
+func init() {
+       macModes[HMACSHA512ETM] = &macMode{64, true, func(key []byte) hash.Hash {
                return hmac.New(sha512.New, key)
-       }},
-       HMACSHA256ETM: {32, true, func(key []byte) hash.Hash {
+       }}
+       macModes[HMACSHA256ETM] = &macMode{32, true, func(key []byte) hash.Hash {
                return hmac.New(sha256.New, key)
-       }},
-       HMACSHA512: {64, false, func(key []byte) hash.Hash {
+       }}
+       macModes[HMACSHA512] = &macMode{64, false, func(key []byte) hash.Hash {
                return hmac.New(sha512.New, key)
-       }},
-       HMACSHA256: {32, false, func(key []byte) hash.Hash {
+       }}
+       macModes[HMACSHA256] = &macMode{32, false, func(key []byte) hash.Hash {
                return hmac.New(sha256.New, key)
-       }},
-       HMACSHA1: {20, false, func(key []byte) hash.Hash {
+       }}
+
+       if fips140.Enabled() {
+               defaultMACs = slices.DeleteFunc(defaultMACs, func(algo string) bool {
+                       _, ok := macModes[algo]
+                       return !ok
+               })
+               return
+       }
+
+       macModes[HMACSHA1] = &macMode{20, false, func(key []byte) hash.Hash {
                return hmac.New(sha1.New, key)
-       }},
-       InsecureHMACSHA196: {20, false, func(key []byte) hash.Hash {
+       }}
+       macModes[InsecureHMACSHA196] = &macMode{20, false, func(key []byte) hash.Hash {
                return truncatingMAC{12, hmac.New(sha1.New, key)}
-       }},
+       }}
 }
index 251b9d06a32425c15db4050986cb95987cf12e77..ab22c3d38db84a6ef5a9159f343fe86eecac98df 100644 (file)
@@ -792,7 +792,7 @@ func marshalString(to []byte, s []byte) []byte {
        return to[len(s):]
 }
 
-var bigIntType = reflect.TypeOf((*big.Int)(nil))
+var bigIntType = reflect.TypeFor[*big.Int]()
 
 // Decode a packet into its corresponding message.
 func decode(packet []byte) (interface{}, error) {
index 657e1079d4be63447aa88bc73d859586e8a068c9..ddc0ed1fc0ac91dbd9c6728201d4b80b5b80806c 100644 (file)
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build go1.24
-
 package ssh
 
 import (
@@ -13,23 +11,10 @@ import (
        "errors"
        "fmt"
        "io"
-       "runtime"
-       "slices"
 
        "golang.org/x/crypto/curve25519"
 )
 
-func init() {
-       // After Go 1.24rc1 mlkem swapped the order of return values of Encapsulate.
-       // See #70950.
-       if runtime.Version() == "go1.24rc1" {
-               return
-       }
-       supportedKexAlgos = slices.Insert(supportedKexAlgos, 0, KeyExchangeMLKEM768X25519)
-       defaultKexAlgos = slices.Insert(defaultKexAlgos, 0, KeyExchangeMLKEM768X25519)
-       kexAlgoMap[KeyExchangeMLKEM768X25519] = &mlkem768WithCurve25519sha256{}
-}
-
 // mlkem768WithCurve25519sha256 implements the hybrid ML-KEM768 with
 // curve25519-sha256 key exchange method, as described by
 // draft-kampanakis-curdle-ssh-pq-ke-05 section 2.3.3.
index 98679ba5b6ed2e1ca202e5196c425f0975183b9f..064dcbaf5aef425631652b2fe9a3cfc31a9e9b98 100644 (file)
@@ -10,6 +10,7 @@ import (
        "fmt"
        "io"
        "net"
+       "slices"
        "strings"
 )
 
@@ -43,6 +44,9 @@ type Permissions struct {
        // pass data from the authentication callbacks to the server
        // application layer.
        Extensions map[string]string
+
+       // ExtraData allows to store user defined data.
+       ExtraData map[any]any
 }
 
 type GSSAPIWithMICConfig struct {
@@ -126,6 +130,21 @@ type ServerConfig struct {
        // Permissions.Extensions entry.
        PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)
 
+       // VerifiedPublicKeyCallback, if non-nil, is called after a client
+       // successfully confirms having control over a key that was previously
+       // approved by PublicKeyCallback. The permissions object passed to the
+       // callback is the one returned by PublicKeyCallback for the given public
+       // key and its ownership is transferred to the callback. The returned
+       // Permissions object can be the same object, optionally modified, or a
+       // completely new object. If VerifiedPublicKeyCallback is non-nil,
+       // PublicKeyCallback is not allowed to return a PartialSuccessError, which
+       // can instead be returned by VerifiedPublicKeyCallback.
+       //
+       // VerifiedPublicKeyCallback does not affect which authentication methods
+       // are included in the list of methods that can be attempted by the client.
+       VerifiedPublicKeyCallback func(conn ConnMetadata, key PublicKey, permissions *Permissions,
+               signatureAlgorithm string) (*Permissions, error)
+
        // KeyboardInteractiveCallback, if non-nil, is called when
        // keyboard-interactive authentication is selected (RFC
        // 4256). The client object's Challenge function should be
@@ -246,7 +265,7 @@ func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewCha
                fullConf.PublicKeyAuthAlgorithms = defaultPubKeyAuthAlgos
        } else {
                for _, algo := range fullConf.PublicKeyAuthAlgorithms {
-                       if !contains(SupportedAlgorithms().PublicKeyAuths, algo) && !contains(InsecureAlgorithms().PublicKeyAuths, algo) {
+                       if !slices.Contains(SupportedAlgorithms().PublicKeyAuths, algo) && !slices.Contains(InsecureAlgorithms().PublicKeyAuths, algo) {
                                c.Close()
                                return nil, nil, nil, fmt.Errorf("ssh: unsupported public key authentication algorithm %s", algo)
                        }
@@ -631,7 +650,7 @@ userAuthLoop:
                                return nil, parseError(msgUserAuthRequest)
                        }
                        algo := string(algoBytes)
-                       if !contains(config.PublicKeyAuthAlgorithms, underlyingAlgo(algo)) {
+                       if !slices.Contains(config.PublicKeyAuthAlgorithms, underlyingAlgo(algo)) {
                                authErr = fmt.Errorf("ssh: algorithm %q not accepted", algo)
                                break
                        }
@@ -652,6 +671,9 @@ userAuthLoop:
                                candidate.pubKeyData = pubKeyData
                                candidate.perms, candidate.result = authConfig.PublicKeyCallback(s, pubKey)
                                _, isPartialSuccessError := candidate.result.(*PartialSuccessError)
+                               if isPartialSuccessError && config.VerifiedPublicKeyCallback != nil {
+                                       return nil, errors.New("ssh: invalid library usage: PublicKeyCallback must not return partial success when VerifiedPublicKeyCallback is defined")
+                               }
 
                                if (candidate.result == nil || isPartialSuccessError) &&
                                        candidate.perms != nil &&
@@ -695,7 +717,7 @@ userAuthLoop:
                                // ssh-rsa-cert-v01@openssh.com algorithm with ssh-rsa public
                                // key type. The algorithm and public key type must be
                                // consistent: both must be certificate algorithms, or neither.
-                               if !contains(algorithmsForKeyFormat(pubKey.Type()), algo) {
+                               if !slices.Contains(algorithmsForKeyFormat(pubKey.Type()), algo) {
                                        authErr = fmt.Errorf("ssh: public key type %q not compatible with selected algorithm %q",
                                                pubKey.Type(), algo)
                                        break
@@ -705,7 +727,7 @@ userAuthLoop:
                                // algorithm name that corresponds to algo with
                                // sig.Format.  This is usually the same, but
                                // for certs, the names differ.
-                               if !contains(config.PublicKeyAuthAlgorithms, sig.Format) {
+                               if !slices.Contains(config.PublicKeyAuthAlgorithms, sig.Format) {
                                        authErr = fmt.Errorf("ssh: algorithm %q not accepted", sig.Format)
                                        break
                                }
@@ -722,6 +744,12 @@ userAuthLoop:
 
                                authErr = candidate.result
                                perms = candidate.perms
+                               if authErr == nil && config.VerifiedPublicKeyCallback != nil {
+                                       // Only call VerifiedPublicKeyCallback after the key has been accepted
+                                       // and successfully verified. If authErr is non-nil, the key is not
+                                       // considered verified and the callback must not run.
+                                       perms, authErr = config.VerifiedPublicKeyCallback(s, pubKey, perms, algo)
+                               }
                        }
                case "gssapi-with-mic":
                        if authConfig.GSSAPIWithMICConfig == nil {
index 24bd7c8e830484a6dcb73a1f4a446964419b2e28..a6249a1227b520ec7177b56fbd33c2c7ea302b47 100644 (file)
@@ -106,6 +106,13 @@ func parseGSSAPIPayload(payload []byte) (*userAuthRequestGSSAPI, error) {
        if !ok {
                return nil, errors.New("parse uint32 failed")
        }
+       // Each ASN.1 encoded OID must have a minimum
+       // of 2 bytes; 64 maximum mechanisms is an
+       // arbitrary, but reasonable ceiling.
+       const maxMechs = 64
+       if n > maxMechs || int(n)*2 > len(rest) {
+               return nil, errors.New("invalid mechanism count")
+       }
        s := &userAuthRequestGSSAPI{
                N:    n,
                OIDS: make([]asn1.ObjectIdentifier, n),
@@ -122,7 +129,6 @@ func parseGSSAPIPayload(payload []byte) (*userAuthRequestGSSAPI, error) {
                if rest, err = asn1.Unmarshal(desiredMech, &s.OIDS[i]); err != nil {
                        return nil, err
                }
-
        }
        return s, nil
 }
index b171b330bc380ae8e7b57527307b3b133ca9c694..152470fcb796f4c319ae0e79ac4db46c1f840967 100644 (file)
@@ -44,7 +44,7 @@ func (c *Client) ListenUnix(socketPath string) (net.Listener, error) {
        if !ok {
                return nil, errors.New("ssh: streamlocal-forward@openssh.com request denied by peer")
        }
-       ch := c.forwards.add(&net.UnixAddr{Name: socketPath, Net: "unix"})
+       ch := c.forwards.add("unix", socketPath)
 
        return &unixListener{socketPath, c, ch}, nil
 }
@@ -96,7 +96,7 @@ func (l *unixListener) Accept() (net.Conn, error) {
 // Close closes the listener.
 func (l *unixListener) Close() error {
        // this also closes the listener.
-       l.conn.forwards.remove(&net.UnixAddr{Name: l.socketPath, Net: "unix"})
+       l.conn.forwards.remove("unix", l.socketPath)
        m := streamLocalChannelForwardMsg{
                l.socketPath,
        }
index 93d844f035168134be20d3a05c9672a1c766b81b..78c41fe5a1264a704b505070302a9b89241b998a 100644 (file)
@@ -11,6 +11,7 @@ import (
        "io"
        "math/rand"
        "net"
+       "net/netip"
        "strconv"
        "strings"
        "sync"
@@ -22,14 +23,21 @@ import (
 // the returned net.Listener. The listener must be serviced, or the
 // SSH connection may hang.
 // N must be "tcp", "tcp4", "tcp6", or "unix".
+//
+// If the address is a hostname, it is sent to the remote peer as-is, without
+// being resolved locally, and the Listener Addr method will return a zero IP.
 func (c *Client) Listen(n, addr string) (net.Listener, error) {
        switch n {
        case "tcp", "tcp4", "tcp6":
-               laddr, err := net.ResolveTCPAddr(n, addr)
+               host, portStr, err := net.SplitHostPort(addr)
+               if err != nil {
+                       return nil, err
+               }
+               port, err := strconv.ParseInt(portStr, 10, 32)
                if err != nil {
                        return nil, err
                }
-               return c.ListenTCP(laddr)
+               return c.listenTCPInternal(host, int(port))
        case "unix":
                return c.ListenUnix(addr)
        default:
@@ -102,15 +110,24 @@ func (c *Client) handleForwards() {
 // ListenTCP requests the remote peer open a listening socket
 // on laddr. Incoming connections will be available by calling
 // Accept on the returned net.Listener.
+//
+// ListenTCP accepts an IP address, to provide a hostname use [Client.Listen]
+// with "tcp", "tcp4", or "tcp6" network instead.
 func (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) {
        c.handleForwardsOnce.Do(c.handleForwards)
        if laddr.Port == 0 && isBrokenOpenSSHVersion(string(c.ServerVersion())) {
                return c.autoPortListenWorkaround(laddr)
        }
 
+       return c.listenTCPInternal(laddr.IP.String(), laddr.Port)
+}
+
+func (c *Client) listenTCPInternal(host string, port int) (net.Listener, error) {
+       c.handleForwardsOnce.Do(c.handleForwards)
+
        m := channelForwardMsg{
-               laddr.IP.String(),
-               uint32(laddr.Port),
+               host,
+               uint32(port),
        }
        // send message
        ok, resp, err := c.SendRequest("tcpip-forward", true, Marshal(&m))
@@ -123,20 +140,33 @@ func (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) {
 
        // If the original port was 0, then the remote side will
        // supply a real port number in the response.
-       if laddr.Port == 0 {
+       if port == 0 {
                var p struct {
                        Port uint32
                }
                if err := Unmarshal(resp, &p); err != nil {
                        return nil, err
                }
-               laddr.Port = int(p.Port)
+               port = int(p.Port)
        }
+       // Construct a local address placeholder for the remote listener. If the
+       // original host is an IP address, preserve it so that Listener.Addr()
+       // reports the same IP. If the host is a hostname or cannot be parsed as an
+       // IP, fall back to IPv4zero. The port field is always set, even if the
+       // original port was 0, because in that case the remote server will assign
+       // one, allowing callers to determine which port was selected.
+       ip := net.IPv4zero
+       if parsed, err := netip.ParseAddr(host); err == nil {
+               ip = net.IP(parsed.AsSlice())
+       }
+       laddr := &net.TCPAddr{
+               IP:   ip,
+               Port: port,
+       }
+       addr := net.JoinHostPort(host, strconv.FormatInt(int64(port), 10))
+       ch := c.forwards.add("tcp", addr)
 
-       // Register this forward, using the port number we obtained.
-       ch := c.forwards.add(laddr)
-
-       return &tcpListener{laddr, c, ch}, nil
+       return &tcpListener{laddr, addr, c, ch}, nil
 }
 
 // forwardList stores a mapping between remote
@@ -149,8 +179,9 @@ type forwardList struct {
 // forwardEntry represents an established mapping of a laddr on a
 // remote ssh server to a channel connected to a tcpListener.
 type forwardEntry struct {
-       laddr net.Addr
-       c     chan forward
+       addr    string // host:port or socket path
+       network string // tcp or unix
+       c       chan forward
 }
 
 // forward represents an incoming forwarded tcpip connection. The
@@ -161,12 +192,13 @@ type forward struct {
        raddr net.Addr   // the raddr of the incoming connection
 }
 
-func (l *forwardList) add(addr net.Addr) chan forward {
+func (l *forwardList) add(n, addr string) chan forward {
        l.Lock()
        defer l.Unlock()
        f := forwardEntry{
-               laddr: addr,
-               c:     make(chan forward, 1),
+               addr:    addr,
+               network: n,
+               c:       make(chan forward, 1),
        }
        l.entries = append(l.entries, f)
        return f.c
@@ -185,19 +217,20 @@ func parseTCPAddr(addr string, port uint32) (*net.TCPAddr, error) {
        if port == 0 || port > 65535 {
                return nil, fmt.Errorf("ssh: port number out of range: %d", port)
        }
-       ip := net.ParseIP(string(addr))
-       if ip == nil {
+       ip, err := netip.ParseAddr(addr)
+       if err != nil {
                return nil, fmt.Errorf("ssh: cannot parse IP address %q", addr)
        }
-       return &net.TCPAddr{IP: ip, Port: int(port)}, nil
+       return &net.TCPAddr{IP: net.IP(ip.AsSlice()), Port: int(port)}, nil
 }
 
 func (l *forwardList) handleChannels(in <-chan NewChannel) {
        for ch := range in {
                var (
-                       laddr net.Addr
-                       raddr net.Addr
-                       err   error
+                       addr    string
+                       network string
+                       raddr   net.Addr
+                       err     error
                )
                switch channelType := ch.ChannelType(); channelType {
                case "forwarded-tcpip":
@@ -207,40 +240,34 @@ func (l *forwardList) handleChannels(in <-chan NewChannel) {
                                continue
                        }
 
-                       // RFC 4254 section 7.2 specifies that incoming
-                       // addresses should list the address, in string
-                       // format. It is implied that this should be an IP
-                       // address, as it would be impossible to connect to it
-                       // otherwise.
-                       laddr, err = parseTCPAddr(payload.Addr, payload.Port)
-                       if err != nil {
-                               ch.Reject(ConnectionFailed, err.Error())
-                               continue
-                       }
+                       // RFC 4254 section 7.2 specifies that incoming addresses should
+                       // list the address that was connected, in string format. It is the
+                       // same address used in the tcpip-forward request. The originator
+                       // address is an IP address instead.
+                       addr = net.JoinHostPort(payload.Addr, strconv.FormatUint(uint64(payload.Port), 10))
+
                        raddr, err = parseTCPAddr(payload.OriginAddr, payload.OriginPort)
                        if err != nil {
                                ch.Reject(ConnectionFailed, err.Error())
                                continue
                        }
-
+                       network = "tcp"
                case "forwarded-streamlocal@openssh.com":
                        var payload forwardedStreamLocalPayload
                        if err = Unmarshal(ch.ExtraData(), &payload); err != nil {
                                ch.Reject(ConnectionFailed, "could not parse forwarded-streamlocal@openssh.com payload: "+err.Error())
                                continue
                        }
-                       laddr = &net.UnixAddr{
-                               Name: payload.SocketPath,
-                               Net:  "unix",
-                       }
+                       addr = payload.SocketPath
                        raddr = &net.UnixAddr{
                                Name: "@",
                                Net:  "unix",
                        }
+                       network = "unix"
                default:
                        panic(fmt.Errorf("ssh: unknown channel type %s", channelType))
                }
-               if ok := l.forward(laddr, raddr, ch); !ok {
+               if ok := l.forward(network, addr, raddr, ch); !ok {
                        // Section 7.2, implementations MUST reject spurious incoming
                        // connections.
                        ch.Reject(Prohibited, "no forward for address")
@@ -252,11 +279,11 @@ func (l *forwardList) handleChannels(in <-chan NewChannel) {
 
 // remove removes the forward entry, and the channel feeding its
 // listener.
-func (l *forwardList) remove(addr net.Addr) {
+func (l *forwardList) remove(n, addr string) {
        l.Lock()
        defer l.Unlock()
        for i, f := range l.entries {
-               if addr.Network() == f.laddr.Network() && addr.String() == f.laddr.String() {
+               if n == f.network && addr == f.addr {
                        l.entries = append(l.entries[:i], l.entries[i+1:]...)
                        close(f.c)
                        return
@@ -274,11 +301,11 @@ func (l *forwardList) closeAll() {
        l.entries = nil
 }
 
-func (l *forwardList) forward(laddr, raddr net.Addr, ch NewChannel) bool {
+func (l *forwardList) forward(n, addr string, raddr net.Addr, ch NewChannel) bool {
        l.Lock()
        defer l.Unlock()
        for _, f := range l.entries {
-               if laddr.Network() == f.laddr.Network() && laddr.String() == f.laddr.String() {
+               if n == f.network && addr == f.addr {
                        f.c <- forward{newCh: ch, raddr: raddr}
                        return true
                }
@@ -288,6 +315,7 @@ func (l *forwardList) forward(laddr, raddr net.Addr, ch NewChannel) bool {
 
 type tcpListener struct {
        laddr *net.TCPAddr
+       addr  string
 
        conn *Client
        in   <-chan forward
@@ -314,13 +342,21 @@ func (l *tcpListener) Accept() (net.Conn, error) {
 
 // Close closes the listener.
 func (l *tcpListener) Close() error {
+       host, port, err := net.SplitHostPort(l.addr)
+       if err != nil {
+               return err
+       }
+       rport, err := strconv.ParseUint(port, 10, 32)
+       if err != nil {
+               return err
+       }
        m := channelForwardMsg{
-               l.laddr.IP.String(),
-               uint32(l.laddr.Port),
+               host,
+               uint32(rport),
        }
 
        // this also closes the listener.
-       l.conn.forwards.remove(l.laddr)
+       l.conn.forwards.remove("tcp", l.addr)
        ok, _, err := l.conn.SendRequest("cancel-tcpip-forward", true, Marshal(&m))
        if err == nil && !ok {
                err = errors.New("ssh: cancel-tcpip-forward failed")
index 663619845c79d9dbb689bfca37dfc2a860358cc3..fa3dd6a4299b647c014e377e75f437ce144598fd 100644 (file)
@@ -8,6 +8,7 @@ import (
        "bufio"
        "bytes"
        "errors"
+       "fmt"
        "io"
        "log"
 )
@@ -254,6 +255,9 @@ var (
 // (to setup server->client keys) or clientKeys (for client->server keys).
 func newPacketCipher(d direction, algs DirectionAlgorithms, kex *kexResult) (packetCipher, error) {
        cipherMode := cipherModes[algs.Cipher]
+       if cipherMode == nil {
+               return nil, fmt.Errorf("ssh: unsupported cipher %v", algs.Cipher)
+       }
 
        iv := make([]byte, cipherMode.ivSize)
        key := make([]byte, cipherMode.keySize)
index db1c95fab1d5956ca226a37564e27c6d790c5131..24cea688204990b03d3c8d9c3ef7371bbdc3cd17 100644 (file)
@@ -2,44 +2,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package context defines the Context type, which carries deadlines,
-// cancellation signals, and other request-scoped values across API boundaries
-// and between processes.
-// As of Go 1.7 this package is available in the standard library under the
-// name [context], and migrating to it can be done automatically with [go fix].
-//
-// Incoming requests to a server should create a [Context], and outgoing
-// calls to servers should accept a Context. The chain of function
-// calls between them must propagate the Context, optionally replacing
-// it with a derived Context created using [WithCancel], [WithDeadline],
-// [WithTimeout], or [WithValue].
-//
-// Programs that use Contexts should follow these rules to keep interfaces
-// consistent across packages and enable static analysis tools to check context
-// propagation:
-//
-// Do not store Contexts inside a struct type; instead, pass a Context
-// explicitly to each function that needs it. This is discussed further in
-// https://go.dev/blog/context-and-structs. The Context should be the first
-// parameter, typically named ctx:
-//
-//     func DoSomething(ctx context.Context, arg Arg) error {
-//             // ... use ctx ...
-//     }
-//
-// Do not pass a nil [Context], even if a function permits it. Pass [context.TODO]
-// if you are unsure about which Context to use.
-//
-// Use context Values only for request-scoped data that transits processes and
-// APIs, not for passing optional parameters to functions.
+// Package context has been superseded by the standard library [context] package.
 //
-// The same Context may be passed to functions running in different goroutines;
-// Contexts are safe for simultaneous use by multiple goroutines.
-//
-// See https://go.dev/blog/context for example code for a server that uses
-// Contexts.
-//
-// [go fix]: https://go.dev/cmd/go#hdr-Update_packages_to_use_new_APIs
+// Deprecated: Use the standard library context package instead.
 package context
 
 import (
@@ -51,36 +16,37 @@ import (
 // API boundaries.
 //
 // Context's methods may be called by multiple goroutines simultaneously.
+//
+//go:fix inline
 type Context = context.Context
 
 // Canceled is the error returned by [Context.Err] when the context is canceled
 // for some reason other than its deadline passing.
+//
+//go:fix inline
 var Canceled = context.Canceled
 
 // DeadlineExceeded is the error returned by [Context.Err] when the context is canceled
 // due to its deadline passing.
+//
+//go:fix inline
 var DeadlineExceeded = context.DeadlineExceeded
 
 // Background returns a non-nil, empty Context. It is never canceled, has no
 // values, and has no deadline. It is typically used by the main function,
 // initialization, and tests, and as the top-level Context for incoming
 // requests.
-func Background() Context {
-       return background
-}
+//
+//go:fix inline
+func Background() Context { return context.Background() }
 
 // TODO returns a non-nil, empty Context. Code should use context.TODO when
 // it's unclear which Context to use or it is not yet available (because the
 // surrounding function has not yet been extended to accept a Context
 // parameter).
-func TODO() Context {
-       return todo
-}
-
-var (
-       background = context.Background()
-       todo       = context.TODO()
-)
+//
+//go:fix inline
+func TODO() Context { return context.TODO() }
 
 // A CancelFunc tells an operation to abandon its work.
 // A CancelFunc does not wait for the work to stop.
@@ -95,6 +61,8 @@ type CancelFunc = context.CancelFunc
 //
 // Canceling this context releases resources associated with it, so code should
 // call cancel as soon as the operations running in this [Context] complete.
+//
+//go:fix inline
 func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
        return context.WithCancel(parent)
 }
@@ -108,6 +76,8 @@ func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
 //
 // Canceling this context releases resources associated with it, so code should
 // call cancel as soon as the operations running in this [Context] complete.
+//
+//go:fix inline
 func WithDeadline(parent Context, d time.Time) (Context, CancelFunc) {
        return context.WithDeadline(parent, d)
 }
@@ -122,6 +92,8 @@ func WithDeadline(parent Context, d time.Time) (Context, CancelFunc) {
 //             defer cancel()  // releases resources if slowOperation completes before timeout elapses
 //             return slowOperation(ctx)
 //     }
+//
+//go:fix inline
 func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
        return context.WithTimeout(parent, timeout)
 }
@@ -139,6 +111,8 @@ func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {
 // interface{}, context keys often have concrete type
 // struct{}. Alternatively, exported context key variables' static
 // type should be a pointer or interface.
+//
+//go:fix inline
 func WithValue(parent Context, key, val interface{}) Context {
        return context.WithValue(parent, key, val)
 }
index a656efc128a6f8848463403496fb1fb74d442933..7a978b47f666cf6105932d99361eb8d26cb54058 100644 (file)
@@ -17,8 +17,21 @@ import (
 )
 
 // Message formats
-
-// A Type is a type of DNS request and response.
+//
+// To add a new Resource Record type:
+// 1. Create Resource Record types
+//   1.1. Add a Type constant named "Type<name>"
+//   1.2. Add the corresponding entry to the typeNames map
+//   1.3. Add a [ResourceBody] implementation named "<name>Resource"
+// 2. Implement packing
+//   2.1. Implement Builder.<name>Resource()
+// 3. Implement unpacking
+//   3.1. Add the unpacking code to unpackResourceBody()
+//   3.2. Implement Parser.<name>Resource()
+
+// A Type is the type of a DNS Resource Record, as defined in the [IANA registry].
+//
+// [IANA registry]: https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4
 type Type uint16
 
 const (
@@ -33,6 +46,8 @@ const (
        TypeAAAA  Type = 28
        TypeSRV   Type = 33
        TypeOPT   Type = 41
+       TypeSVCB  Type = 64
+       TypeHTTPS Type = 65
 
        // Question.Type
        TypeWKS   Type = 11
@@ -53,6 +68,8 @@ var typeNames = map[Type]string{
        TypeAAAA:  "TypeAAAA",
        TypeSRV:   "TypeSRV",
        TypeOPT:   "TypeOPT",
+       TypeSVCB:  "TypeSVCB",
+       TypeHTTPS: "TypeHTTPS",
        TypeWKS:   "TypeWKS",
        TypeHINFO: "TypeHINFO",
        TypeMINFO: "TypeMINFO",
@@ -273,6 +290,8 @@ var (
        errTooManyAdditionals = errors.New("too many Additionals to pack (>65535)")
        errNonCanonicalName   = errors.New("name is not in canonical format (it must end with a .)")
        errStringTooLong      = errors.New("character string exceeds maximum length (255)")
+       errParamOutOfOrder    = errors.New("parameter out of order")
+       errTooLongSVCBValue   = errors.New("value too long (>65535 bytes)")
 )
 
 // Internal constants.
@@ -2220,6 +2239,16 @@ func unpackResourceBody(msg []byte, off int, hdr ResourceHeader) (ResourceBody,
                rb, err = unpackSRVResource(msg, off)
                r = &rb
                name = "SRV"
+       case TypeSVCB:
+               var rb SVCBResource
+               rb, err = unpackSVCBResource(msg, off, hdr.Length)
+               r = &rb
+               name = "SVCB"
+       case TypeHTTPS:
+               var rb HTTPSResource
+               rb.SVCBResource, err = unpackSVCBResource(msg, off, hdr.Length)
+               r = &rb
+               name = "HTTPS"
        case TypeOPT:
                var rb OPTResource
                rb, err = unpackOPTResource(msg, off, hdr.Length)
diff --git a/vendor/golang.org/x/net/dns/dnsmessage/svcb.go b/vendor/golang.org/x/net/dns/dnsmessage/svcb.go
new file mode 100644 (file)
index 0000000..de1633f
--- /dev/null
@@ -0,0 +1,329 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package dnsmessage
+
+import (
+       "math"
+       "slices"
+       "strings"
+)
+
+// An SVCBResource is an SVCB Resource record.
+type SVCBResource struct {
+       Priority uint16
+       Target   Name
+       Params   []SVCParam // Must be in strict increasing order by Key.
+}
+
+func (r *SVCBResource) realType() Type {
+       return TypeSVCB
+}
+
+// GoString implements fmt.GoStringer.GoString.
+func (r *SVCBResource) GoString() string {
+       var b strings.Builder
+       b.WriteString("dnsmessage.SVCBResource{")
+       b.WriteString("Priority: " + printUint16(r.Priority) + ", ")
+       b.WriteString("Target: " + r.Target.GoString() + ", ")
+       b.WriteString("Params: []dnsmessage.SVCParam{")
+       if len(r.Params) > 0 {
+               b.WriteString(r.Params[0].GoString())
+               for _, p := range r.Params[1:] {
+                       b.WriteString(", " + p.GoString())
+               }
+       }
+       b.WriteString("}}")
+       return b.String()
+}
+
+// An HTTPSResource is an HTTPS Resource record.
+// It has the same format as the SVCB record.
+type HTTPSResource struct {
+       // Alias for SVCB resource record.
+       SVCBResource
+}
+
+func (r *HTTPSResource) realType() Type {
+       return TypeHTTPS
+}
+
+// GoString implements fmt.GoStringer.GoString.
+func (r *HTTPSResource) GoString() string {
+       return "dnsmessage.HTTPSResource{SVCBResource: " + r.SVCBResource.GoString() + "}"
+}
+
+// GetParam returns a parameter value by key.
+func (r *SVCBResource) GetParam(key SVCParamKey) (value []byte, ok bool) {
+       for i := range r.Params {
+               if r.Params[i].Key == key {
+                       return r.Params[i].Value, true
+               }
+               if r.Params[i].Key > key {
+                       break
+               }
+       }
+       return nil, false
+}
+
+// SetParam sets a parameter value by key.
+// The Params list is kept sorted by key.
+func (r *SVCBResource) SetParam(key SVCParamKey, value []byte) {
+       i := 0
+       for i < len(r.Params) {
+               if r.Params[i].Key >= key {
+                       break
+               }
+               i++
+       }
+
+       if i < len(r.Params) && r.Params[i].Key == key {
+               r.Params[i].Value = value
+               return
+       }
+
+       r.Params = slices.Insert(r.Params, i, SVCParam{Key: key, Value: value})
+}
+
+// DeleteParam deletes a parameter by key.
+// It returns true if the parameter was present.
+func (r *SVCBResource) DeleteParam(key SVCParamKey) bool {
+       for i := range r.Params {
+               if r.Params[i].Key == key {
+                       r.Params = slices.Delete(r.Params, i, i+1)
+                       return true
+               }
+               if r.Params[i].Key > key {
+                       break
+               }
+       }
+       return false
+}
+
+// A SVCParam is a service parameter.
+type SVCParam struct {
+       Key   SVCParamKey
+       Value []byte
+}
+
+// GoString implements fmt.GoStringer.GoString.
+func (p SVCParam) GoString() string {
+       return "dnsmessage.SVCParam{" +
+               "Key: " + p.Key.GoString() + ", " +
+               "Value: []byte{" + printByteSlice(p.Value) + "}}"
+}
+
+// A SVCParamKey is a key for a service parameter.
+type SVCParamKey uint16
+
+// Values defined at https://www.iana.org/assignments/dns-svcb/dns-svcb.xhtml#dns-svcparamkeys.
+const (
+       SVCParamMandatory          SVCParamKey = 0
+       SVCParamALPN               SVCParamKey = 1
+       SVCParamNoDefaultALPN      SVCParamKey = 2
+       SVCParamPort               SVCParamKey = 3
+       SVCParamIPv4Hint           SVCParamKey = 4
+       SVCParamECH                SVCParamKey = 5
+       SVCParamIPv6Hint           SVCParamKey = 6
+       SVCParamDOHPath            SVCParamKey = 7
+       SVCParamOHTTP              SVCParamKey = 8
+       SVCParamTLSSupportedGroups SVCParamKey = 9
+)
+
+var svcParamKeyNames = map[SVCParamKey]string{
+       SVCParamMandatory:          "Mandatory",
+       SVCParamALPN:               "ALPN",
+       SVCParamNoDefaultALPN:      "NoDefaultALPN",
+       SVCParamPort:               "Port",
+       SVCParamIPv4Hint:           "IPv4Hint",
+       SVCParamECH:                "ECH",
+       SVCParamIPv6Hint:           "IPv6Hint",
+       SVCParamDOHPath:            "DOHPath",
+       SVCParamOHTTP:              "OHTTP",
+       SVCParamTLSSupportedGroups: "TLSSupportedGroups",
+}
+
+// String implements fmt.Stringer.String.
+func (k SVCParamKey) String() string {
+       if n, ok := svcParamKeyNames[k]; ok {
+               return n
+       }
+       return printUint16(uint16(k))
+}
+
+// GoString implements fmt.GoStringer.GoString.
+func (k SVCParamKey) GoString() string {
+       if n, ok := svcParamKeyNames[k]; ok {
+               return "dnsmessage.SVCParam" + n
+       }
+       return printUint16(uint16(k))
+}
+
+func (r *SVCBResource) pack(msg []byte, _ map[string]uint16, _ int) ([]byte, error) {
+       oldMsg := msg
+       msg = packUint16(msg, r.Priority)
+       // https://datatracker.ietf.org/doc/html/rfc3597#section-4 prohibits name
+       // compression for RR types that are not "well-known".
+       // https://datatracker.ietf.org/doc/html/rfc9460#section-2.2 explicitly states that
+       // compression of the Target is prohibited, following RFC 3597.
+       msg, err := r.Target.pack(msg, nil, 0)
+       if err != nil {
+               return oldMsg, &nestedError{"SVCBResource.Target", err}
+       }
+       var previousKey SVCParamKey
+       for i, param := range r.Params {
+               if i > 0 && param.Key <= previousKey {
+                       return oldMsg, &nestedError{"SVCBResource.Params", errParamOutOfOrder}
+               }
+               if len(param.Value) > math.MaxUint16 {
+                       return oldMsg, &nestedError{"SVCBResource.Params", errTooLongSVCBValue}
+               }
+               msg = packUint16(msg, uint16(param.Key))
+               msg = packUint16(msg, uint16(len(param.Value)))
+               msg = append(msg, param.Value...)
+       }
+       return msg, nil
+}
+
+func unpackSVCBResource(msg []byte, off int, length uint16) (SVCBResource, error) {
+       // Wire format reference: https://www.rfc-editor.org/rfc/rfc9460.html#section-2.2.
+       r := SVCBResource{}
+       paramsOff := off
+       bodyEnd := off + int(length)
+
+       var err error
+       if r.Priority, paramsOff, err = unpackUint16(msg, paramsOff); err != nil {
+               return SVCBResource{}, &nestedError{"Priority", err}
+       }
+
+       if paramsOff, err = r.Target.unpack(msg, paramsOff); err != nil {
+               return SVCBResource{}, &nestedError{"Target", err}
+       }
+
+       // Two-pass parsing to avoid allocations.
+       // First, count the number of params.
+       n := 0
+       var totalValueLen uint16
+       off = paramsOff
+       var previousKey uint16
+       for off < bodyEnd {
+               var key, len uint16
+               if key, off, err = unpackUint16(msg, off); err != nil {
+                       return SVCBResource{}, &nestedError{"Params key", err}
+               }
+               if n > 0 && key <= previousKey {
+                       // As per https://www.rfc-editor.org/rfc/rfc9460.html#section-2.2, clients MUST
+                       // consider the RR malformed if the SvcParamKeys are not in strictly increasing numeric order
+                       return SVCBResource{}, &nestedError{"Params", errParamOutOfOrder}
+               }
+               if len, off, err = unpackUint16(msg, off); err != nil {
+                       return SVCBResource{}, &nestedError{"Params value length", err}
+               }
+               if off+int(len) > bodyEnd {
+                       return SVCBResource{}, errResourceLen
+               }
+               totalValueLen += len
+               off += int(len)
+               n++
+       }
+       if off != bodyEnd {
+               return SVCBResource{}, errResourceLen
+       }
+
+       // Second, fill in the params.
+       r.Params = make([]SVCParam, n)
+       // valuesBuf is used to hold all param values to reduce allocations.
+       // Each param's Value slice will point into this buffer.
+       valuesBuf := make([]byte, totalValueLen)
+       off = paramsOff
+       for i := 0; i < n; i++ {
+               p := &r.Params[i]
+               var key, len uint16
+               if key, off, err = unpackUint16(msg, off); err != nil {
+                       return SVCBResource{}, &nestedError{"param key", err}
+               }
+               p.Key = SVCParamKey(key)
+               if len, off, err = unpackUint16(msg, off); err != nil {
+                       return SVCBResource{}, &nestedError{"param length", err}
+               }
+               if copy(valuesBuf, msg[off:off+int(len)]) != int(len) {
+                       return SVCBResource{}, &nestedError{"param value", errCalcLen}
+               }
+               p.Value = valuesBuf[:len:len]
+               valuesBuf = valuesBuf[len:]
+               off += int(len)
+       }
+
+       return r, nil
+}
+
+// genericSVCBResource parses a single Resource Record compatible with SVCB.
+func (p *Parser) genericSVCBResource(svcbType Type) (SVCBResource, error) {
+       if !p.resHeaderValid || p.resHeaderType != svcbType {
+               return SVCBResource{}, ErrNotStarted
+       }
+       r, err := unpackSVCBResource(p.msg, p.off, p.resHeaderLength)
+       if err != nil {
+               return SVCBResource{}, err
+       }
+       p.off += int(p.resHeaderLength)
+       p.resHeaderValid = false
+       p.index++
+       return r, nil
+}
+
+// SVCBResource parses a single SVCBResource.
+//
+// One of the XXXHeader methods must have been called before calling this
+// method.
+func (p *Parser) SVCBResource() (SVCBResource, error) {
+       return p.genericSVCBResource(TypeSVCB)
+}
+
+// HTTPSResource parses a single HTTPSResource.
+//
+// One of the XXXHeader methods must have been called before calling this
+// method.
+func (p *Parser) HTTPSResource() (HTTPSResource, error) {
+       svcb, err := p.genericSVCBResource(TypeHTTPS)
+       if err != nil {
+               return HTTPSResource{}, err
+       }
+       return HTTPSResource{svcb}, nil
+}
+
+// genericSVCBResource is the generic implementation for adding SVCB-like resources.
+func (b *Builder) genericSVCBResource(h ResourceHeader, r SVCBResource) error {
+       if err := b.checkResourceSection(); err != nil {
+               return err
+       }
+       msg, lenOff, err := h.pack(b.msg, b.compression, b.start)
+       if err != nil {
+               return &nestedError{"ResourceHeader", err}
+       }
+       preLen := len(msg)
+       if msg, err = r.pack(msg, b.compression, b.start); err != nil {
+               return &nestedError{"ResourceBody", err}
+       }
+       if err := h.fixLen(msg, lenOff, preLen); err != nil {
+               return err
+       }
+       if err := b.incrementSectionCount(); err != nil {
+               return err
+       }
+       b.msg = msg
+       return nil
+}
+
+// SVCBResource adds a single SVCBResource.
+func (b *Builder) SVCBResource(h ResourceHeader, r SVCBResource) error {
+       h.Type = r.realType()
+       return b.genericSVCBResource(h, r)
+}
+
+// HTTPSResource adds a single HTTPSResource.
+func (b *Builder) HTTPSResource(h ResourceHeader, r HTTPSResource) error {
+       h.Type = r.realType()
+       return b.genericSVCBResource(h, r.SVCBResource)
+}
index 04c6bec21073773d3e975f35d62b2c6599b709d0..12f227370625adba23d50a648a186003a8b7427c 100644 (file)
@@ -299,7 +299,7 @@ func escape(w writer, s string) error {
                case '\r':
                        esc = "&#13;"
                default:
-                       panic("unrecognized escape character")
+                       panic("html: unrecognized escape character")
                }
                s = s[i+1:]
                if _, err := w.WriteString(esc); err != nil {
index 518ee4c94e7498da110263ef680b7c4adae8f024..88fc0056a347b69c92a3b5da5e36b2a1023361a2 100644 (file)
@@ -136,7 +136,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int {
                                        return -1
                                }
                        default:
-                               panic("unreachable")
+                               panic(fmt.Sprintf("html: internal error: indexOfElementInScope unknown scope: %d", s))
                        }
                }
                switch s {
@@ -179,7 +179,7 @@ func (p *parser) clearStackToContext(s scope) {
                                return
                        }
                default:
-                       panic("unreachable")
+                       panic(fmt.Sprintf("html: internal error: clearStackToContext unknown scope: %d", s))
                }
        }
 }
@@ -231,7 +231,14 @@ func (p *parser) addChild(n *Node) {
        }
 
        if n.Type == ElementNode {
-               p.oe = append(p.oe, n)
+               p.insertOpenElement(n)
+       }
+}
+
+func (p *parser) insertOpenElement(n *Node) {
+       p.oe = append(p.oe, n)
+       if len(p.oe) > 512 {
+               panic("html: open stack of elements exceeds 512 nodes")
        }
 }
 
@@ -810,7 +817,7 @@ func afterHeadIM(p *parser) bool {
                        p.im = inFramesetIM
                        return true
                case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
-                       p.oe = append(p.oe, p.head)
+                       p.insertOpenElement(p.head)
                        defer p.oe.remove(p.head)
                        return inHeadIM(p)
                case a.Head:
@@ -1678,7 +1685,7 @@ func inTableBodyIM(p *parser) bool {
        return inTableIM(p)
 }
 
-// Section 12.2.6.4.14.
+// Section 13.2.6.4.14.
 func inRowIM(p *parser) bool {
        switch p.tok.Type {
        case StartTagToken:
@@ -1690,7 +1697,9 @@ func inRowIM(p *parser) bool {
                        p.im = inCellIM
                        return true
                case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr:
-                       if p.popUntil(tableScope, a.Tr) {
+                       if p.elementInScope(tableScope, a.Tr) {
+                               p.clearStackToContext(tableRowScope)
+                               p.oe.pop()
                                p.im = inTableBodyIM
                                return false
                        }
@@ -1700,22 +1709,28 @@ func inRowIM(p *parser) bool {
        case EndTagToken:
                switch p.tok.DataAtom {
                case a.Tr:
-                       if p.popUntil(tableScope, a.Tr) {
+                       if p.elementInScope(tableScope, a.Tr) {
+                               p.clearStackToContext(tableRowScope)
+                               p.oe.pop()
                                p.im = inTableBodyIM
                                return true
                        }
                        // Ignore the token.
                        return true
                case a.Table:
-                       if p.popUntil(tableScope, a.Tr) {
+                       if p.elementInScope(tableScope, a.Tr) {
+                               p.clearStackToContext(tableRowScope)
+                               p.oe.pop()
                                p.im = inTableBodyIM
                                return false
                        }
                        // Ignore the token.
                        return true
                case a.Tbody, a.Tfoot, a.Thead:
-                       if p.elementInScope(tableScope, p.tok.DataAtom) {
-                               p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String())
+                       if p.elementInScope(tableScope, p.tok.DataAtom) && p.elementInScope(tableScope, a.Tr) {
+                               p.clearStackToContext(tableRowScope)
+                               p.oe.pop()
+                               p.im = inTableBodyIM
                                return false
                        }
                        // Ignore the token.
@@ -2222,16 +2237,20 @@ func parseForeignContent(p *parser) bool {
                        p.acknowledgeSelfClosingTag()
                }
        case EndTagToken:
+               if strings.EqualFold(p.oe[len(p.oe)-1].Data, p.tok.Data) {
+                       p.oe = p.oe[:len(p.oe)-1]
+                       return true
+               }
                for i := len(p.oe) - 1; i >= 0; i-- {
-                       if p.oe[i].Namespace == "" {
-                               return p.im(p)
-                       }
                        if strings.EqualFold(p.oe[i].Data, p.tok.Data) {
                                p.oe = p.oe[:i]
+                               return true
+                       }
+                       if i > 0 && p.oe[i-1].Namespace == "" {
                                break
                        }
                }
-               return true
+               return p.im(p)
        default:
                // Ignore the token.
        }
@@ -2312,9 +2331,13 @@ func (p *parser) parseCurrentToken() {
        }
 }
 
-func (p *parser) parse() error {
+func (p *parser) parse() (err error) {
+       defer func() {
+               if panicErr := recover(); panicErr != nil {
+                       err = fmt.Errorf("%s", panicErr)
+               }
+       }()
        // Iterate until EOF. Any other error will cause an early return.
-       var err error
        for err != io.EOF {
                // CDATA sections are allowed only in foreign content.
                n := p.oe.top()
@@ -2343,6 +2366,8 @@ func (p *parser) parse() error {
 // <tag>s. Conversely, explicit <tag>s in r's data can be silently dropped,
 // with no corresponding node in the resulting tree.
 //
+// Parse will reject HTML that is nested deeper than 512 elements.
+//
 // The input is assumed to be UTF-8 encoded.
 func Parse(r io.Reader) (*Node, error) {
        return ParseWithOptions(r)
index e8c12334553d5bd5a9a48e07562aa0889b9f653b..0157d89e1fda198f2a2f277da278e367d8dc6148 100644 (file)
@@ -184,7 +184,7 @@ func render1(w writer, n *Node) error {
                return err
        }
 
-       // Add initial newline where there is danger of a newline beging ignored.
+       // Add initial newline where there is danger of a newline being ignored.
        if c := n.FirstChild; c != nil && c.Type == TextNode && strings.HasPrefix(c.Data, "\n") {
                switch n.Data {
                case "pre", "listing", "textarea":
index ca645d9a1aff0e3469ed8dd88489dba84fbe45f7..8a7a89d016ed6dbe1d5b1b682ef11d8d5a3b7ff2 100644 (file)
@@ -27,6 +27,7 @@ import (
 //   - If the resulting value is zero or out of range, use a default.
 type http2Config struct {
        MaxConcurrentStreams         uint32
+       StrictMaxConcurrentRequests  bool
        MaxDecoderHeaderTableSize    uint32
        MaxEncoderHeaderTableSize    uint32
        MaxReadFrameSize             uint32
@@ -55,7 +56,7 @@ func configFromServer(h1 *http.Server, h2 *Server) http2Config {
                PermitProhibitedCipherSuites: h2.PermitProhibitedCipherSuites,
                CountError:                   h2.CountError,
        }
-       fillNetHTTPServerConfig(&conf, h1)
+       fillNetHTTPConfig(&conf, h1.HTTP2)
        setConfigDefaults(&conf, true)
        return conf
 }
@@ -64,12 +65,13 @@ func configFromServer(h1 *http.Server, h2 *Server) http2Config {
 // (the net/http Transport).
 func configFromTransport(h2 *Transport) http2Config {
        conf := http2Config{
-               MaxEncoderHeaderTableSize: h2.MaxEncoderHeaderTableSize,
-               MaxDecoderHeaderTableSize: h2.MaxDecoderHeaderTableSize,
-               MaxReadFrameSize:          h2.MaxReadFrameSize,
-               SendPingTimeout:           h2.ReadIdleTimeout,
-               PingTimeout:               h2.PingTimeout,
-               WriteByteTimeout:          h2.WriteByteTimeout,
+               StrictMaxConcurrentRequests: h2.StrictMaxConcurrentStreams,
+               MaxEncoderHeaderTableSize:   h2.MaxEncoderHeaderTableSize,
+               MaxDecoderHeaderTableSize:   h2.MaxDecoderHeaderTableSize,
+               MaxReadFrameSize:            h2.MaxReadFrameSize,
+               SendPingTimeout:             h2.ReadIdleTimeout,
+               PingTimeout:                 h2.PingTimeout,
+               WriteByteTimeout:            h2.WriteByteTimeout,
        }
 
        // Unlike most config fields, where out-of-range values revert to the default,
@@ -81,7 +83,7 @@ func configFromTransport(h2 *Transport) http2Config {
        }
 
        if h2.t1 != nil {
-               fillNetHTTPTransportConfig(&conf, h2.t1)
+               fillNetHTTPConfig(&conf, h2.t1.HTTP2)
        }
        setConfigDefaults(&conf, false)
        return conf
@@ -120,3 +122,48 @@ func adjustHTTP1MaxHeaderSize(n int64) int64 {
        const typicalHeaders = 10   // conservative
        return n + typicalHeaders*perFieldOverhead
 }
+
+func fillNetHTTPConfig(conf *http2Config, h2 *http.HTTP2Config) {
+       if h2 == nil {
+               return
+       }
+       if h2.MaxConcurrentStreams != 0 {
+               conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams)
+       }
+       if http2ConfigStrictMaxConcurrentRequests(h2) {
+               conf.StrictMaxConcurrentRequests = true
+       }
+       if h2.MaxEncoderHeaderTableSize != 0 {
+               conf.MaxEncoderHeaderTableSize = uint32(h2.MaxEncoderHeaderTableSize)
+       }
+       if h2.MaxDecoderHeaderTableSize != 0 {
+               conf.MaxDecoderHeaderTableSize = uint32(h2.MaxDecoderHeaderTableSize)
+       }
+       if h2.MaxConcurrentStreams != 0 {
+               conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams)
+       }
+       if h2.MaxReadFrameSize != 0 {
+               conf.MaxReadFrameSize = uint32(h2.MaxReadFrameSize)
+       }
+       if h2.MaxReceiveBufferPerConnection != 0 {
+               conf.MaxUploadBufferPerConnection = int32(h2.MaxReceiveBufferPerConnection)
+       }
+       if h2.MaxReceiveBufferPerStream != 0 {
+               conf.MaxUploadBufferPerStream = int32(h2.MaxReceiveBufferPerStream)
+       }
+       if h2.SendPingTimeout != 0 {
+               conf.SendPingTimeout = h2.SendPingTimeout
+       }
+       if h2.PingTimeout != 0 {
+               conf.PingTimeout = h2.PingTimeout
+       }
+       if h2.WriteByteTimeout != 0 {
+               conf.WriteByteTimeout = h2.WriteByteTimeout
+       }
+       if h2.PermitProhibitedCipherSuites {
+               conf.PermitProhibitedCipherSuites = true
+       }
+       if h2.CountError != nil {
+               conf.CountError = h2.CountError
+       }
+}
diff --git a/vendor/golang.org/x/net/http2/config_go124.go b/vendor/golang.org/x/net/http2/config_go124.go
deleted file mode 100644 (file)
index 5b516c5..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.24
-
-package http2
-
-import "net/http"
-
-// fillNetHTTPServerConfig sets fields in conf from srv.HTTP2.
-func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) {
-       fillNetHTTPConfig(conf, srv.HTTP2)
-}
-
-// fillNetHTTPTransportConfig sets fields in conf from tr.HTTP2.
-func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) {
-       fillNetHTTPConfig(conf, tr.HTTP2)
-}
-
-func fillNetHTTPConfig(conf *http2Config, h2 *http.HTTP2Config) {
-       if h2 == nil {
-               return
-       }
-       if h2.MaxConcurrentStreams != 0 {
-               conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams)
-       }
-       if h2.MaxEncoderHeaderTableSize != 0 {
-               conf.MaxEncoderHeaderTableSize = uint32(h2.MaxEncoderHeaderTableSize)
-       }
-       if h2.MaxDecoderHeaderTableSize != 0 {
-               conf.MaxDecoderHeaderTableSize = uint32(h2.MaxDecoderHeaderTableSize)
-       }
-       if h2.MaxConcurrentStreams != 0 {
-               conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams)
-       }
-       if h2.MaxReadFrameSize != 0 {
-               conf.MaxReadFrameSize = uint32(h2.MaxReadFrameSize)
-       }
-       if h2.MaxReceiveBufferPerConnection != 0 {
-               conf.MaxUploadBufferPerConnection = int32(h2.MaxReceiveBufferPerConnection)
-       }
-       if h2.MaxReceiveBufferPerStream != 0 {
-               conf.MaxUploadBufferPerStream = int32(h2.MaxReceiveBufferPerStream)
-       }
-       if h2.SendPingTimeout != 0 {
-               conf.SendPingTimeout = h2.SendPingTimeout
-       }
-       if h2.PingTimeout != 0 {
-               conf.PingTimeout = h2.PingTimeout
-       }
-       if h2.WriteByteTimeout != 0 {
-               conf.WriteByteTimeout = h2.WriteByteTimeout
-       }
-       if h2.PermitProhibitedCipherSuites {
-               conf.PermitProhibitedCipherSuites = true
-       }
-       if h2.CountError != nil {
-               conf.CountError = h2.CountError
-       }
-}
diff --git a/vendor/golang.org/x/net/http2/config_go125.go b/vendor/golang.org/x/net/http2/config_go125.go
new file mode 100644 (file)
index 0000000..b4373fe
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build !go1.26
+
+package http2
+
+import (
+       "net/http"
+)
+
+func http2ConfigStrictMaxConcurrentRequests(h2 *http.HTTP2Config) bool {
+       return false
+}
diff --git a/vendor/golang.org/x/net/http2/config_go126.go b/vendor/golang.org/x/net/http2/config_go126.go
new file mode 100644 (file)
index 0000000..6b071c1
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build go1.26
+
+package http2
+
+import (
+       "net/http"
+)
+
+func http2ConfigStrictMaxConcurrentRequests(h2 *http.HTTP2Config) bool {
+       return h2.StrictMaxConcurrentRequests
+}
diff --git a/vendor/golang.org/x/net/http2/config_pre_go124.go b/vendor/golang.org/x/net/http2/config_pre_go124.go
deleted file mode 100644 (file)
index 060fd6c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build !go1.24
-
-package http2
-
-import "net/http"
-
-// Pre-Go 1.24 fallback.
-// The Server.HTTP2 and Transport.HTTP2 config fields were added in Go 1.24.
-
-func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) {}
-
-func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) {}
index db3264da8cc8e45a83bb580ebcfb02e44ede54fa..9a4bd123c95e97d5ea95428dfc1468ccc1ff63c3 100644 (file)
@@ -280,6 +280,8 @@ type Framer struct {
        // lastHeaderStream is non-zero if the last frame was an
        // unfinished HEADERS/CONTINUATION.
        lastHeaderStream uint32
+       // lastFrameType holds the type of the last frame for verifying frame order.
+       lastFrameType FrameType
 
        maxReadSize uint32
        headerBuf   [frameHeaderLen]byte
@@ -347,7 +349,7 @@ func (fr *Framer) maxHeaderListSize() uint32 {
 func (f *Framer) startWrite(ftype FrameType, flags Flags, streamID uint32) {
        // Write the FrameHeader.
        f.wbuf = append(f.wbuf[:0],
-               0, // 3 bytes of length, filled in in endWrite
+               0, // 3 bytes of length, filled in endWrite
                0,
                0,
                byte(ftype),
@@ -488,30 +490,41 @@ func terminalReadFrameError(err error) bool {
        return err != nil
 }
 
-// ReadFrame reads a single frame. The returned Frame is only valid
-// until the next call to ReadFrame.
+// ReadFrameHeader reads the header of the next frame.
+// It reads the 9-byte fixed frame header, and does not read any portion of the
+// frame payload. The caller is responsible for consuming the payload, either
+// with ReadFrameForHeader or directly from the Framer's io.Reader.
 //
-// If the frame is larger than previously set with SetMaxReadFrameSize, the
-// returned error is ErrFrameTooLarge. Other errors may be of type
-// ConnectionError, StreamError, or anything else from the underlying
-// reader.
+// If the frame is larger than previously set with SetMaxReadFrameSize, it
+// returns the frame header and ErrFrameTooLarge.
 //
-// If ReadFrame returns an error and a non-nil Frame, the Frame's StreamID
-// indicates the stream responsible for the error.
-func (fr *Framer) ReadFrame() (Frame, error) {
+// If the returned FrameHeader.StreamID is non-zero, it indicates the stream
+// responsible for the error.
+func (fr *Framer) ReadFrameHeader() (FrameHeader, error) {
        fr.errDetail = nil
-       if fr.lastFrame != nil {
-               fr.lastFrame.invalidate()
-       }
        fh, err := readFrameHeader(fr.headerBuf[:], fr.r)
        if err != nil {
-               return nil, err
+               return fh, err
        }
        if fh.Length > fr.maxReadSize {
                if fh == invalidHTTP1LookingFrameHeader() {
-                       return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", ErrFrameTooLarge)
+                       return fh, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", ErrFrameTooLarge)
                }
-               return nil, ErrFrameTooLarge
+               return fh, ErrFrameTooLarge
+       }
+       if err := fr.checkFrameOrder(fh); err != nil {
+               return fh, err
+       }
+       return fh, nil
+}
+
+// ReadFrameForHeader reads the payload for the frame with the given FrameHeader.
+//
+// It behaves identically to ReadFrame, other than not checking the maximum
+// frame size.
+func (fr *Framer) ReadFrameForHeader(fh FrameHeader) (Frame, error) {
+       if fr.lastFrame != nil {
+               fr.lastFrame.invalidate()
        }
        payload := fr.getReadBuf(fh.Length)
        if _, err := io.ReadFull(fr.r, payload); err != nil {
@@ -527,9 +540,7 @@ func (fr *Framer) ReadFrame() (Frame, error) {
                }
                return nil, err
        }
-       if err := fr.checkFrameOrder(f); err != nil {
-               return nil, err
-       }
+       fr.lastFrame = f
        if fr.logReads {
                fr.debugReadLoggerf("http2: Framer %p: read %v", fr, summarizeFrame(f))
        }
@@ -539,6 +550,24 @@ func (fr *Framer) ReadFrame() (Frame, error) {
        return f, nil
 }
 
+// ReadFrame reads a single frame. The returned Frame is only valid
+// until the next call to ReadFrame or ReadFrameBodyForHeader.
+//
+// If the frame is larger than previously set with SetMaxReadFrameSize, the
+// returned error is ErrFrameTooLarge. Other errors may be of type
+// ConnectionError, StreamError, or anything else from the underlying
+// reader.
+//
+// If ReadFrame returns an error and a non-nil Frame, the Frame's StreamID
+// indicates the stream responsible for the error.
+func (fr *Framer) ReadFrame() (Frame, error) {
+       fh, err := fr.ReadFrameHeader()
+       if err != nil {
+               return nil, err
+       }
+       return fr.ReadFrameForHeader(fh)
+}
+
 // connError returns ConnectionError(code) but first
 // stashes away a public reason to the caller can optionally relay it
 // to the peer before hanging up on them. This might help others debug
@@ -551,20 +580,19 @@ func (fr *Framer) connError(code ErrCode, reason string) error {
 // checkFrameOrder reports an error if f is an invalid frame to return
 // next from ReadFrame. Mostly it checks whether HEADERS and
 // CONTINUATION frames are contiguous.
-func (fr *Framer) checkFrameOrder(f Frame) error {
-       last := fr.lastFrame
-       fr.lastFrame = f
+func (fr *Framer) checkFrameOrder(fh FrameHeader) error {
+       lastType := fr.lastFrameType
+       fr.lastFrameType = fh.Type
        if fr.AllowIllegalReads {
                return nil
        }
 
-       fh := f.Header()
        if fr.lastHeaderStream != 0 {
                if fh.Type != FrameContinuation {
                        return fr.connError(ErrCodeProtocol,
                                fmt.Sprintf("got %s for stream %d; expected CONTINUATION following %s for stream %d",
                                        fh.Type, fh.StreamID,
-                                       last.Header().Type, fr.lastHeaderStream))
+                                       lastType, fr.lastHeaderStream))
                }
                if fh.StreamID != fr.lastHeaderStream {
                        return fr.connError(ErrCodeProtocol,
@@ -1152,7 +1180,16 @@ type PriorityFrame struct {
        PriorityParam
 }
 
-// PriorityParam are the stream prioritzation parameters.
+var defaultRFC9218Priority = PriorityParam{
+       incremental: 0,
+       urgency:     3,
+}
+
+// Note that HTTP/2 has had two different prioritization schemes, and
+// PriorityParam struct below is a superset of both schemes. The exported
+// symbols are from RFC 7540 and the non-exported ones are from RFC 9218.
+
+// PriorityParam are the stream prioritization parameters.
 type PriorityParam struct {
        // StreamDep is a 31-bit stream identifier for the
        // stream that this stream depends on. Zero means no
@@ -1167,6 +1204,20 @@ type PriorityParam struct {
        // the spec, "Add one to the value to obtain a weight between
        // 1 and 256."
        Weight uint8
+
+       // "The urgency (u) parameter value is Integer (see Section 3.3.1 of
+       // [STRUCTURED-FIELDS]), between 0 and 7 inclusive, in descending order of
+       // priority. The default is 3."
+       urgency uint8
+
+       // "The incremental (i) parameter value is Boolean (see Section 3.3.6 of
+       // [STRUCTURED-FIELDS]). It indicates if an HTTP response can be processed
+       // incrementally, i.e., provide some meaningful output as chunks of the
+       // response arrive."
+       //
+       // We use uint8 (i.e. 0 is false, 1 is true) instead of bool so we can
+       // avoid unnecessary type conversions and because either type takes 1 byte.
+       incremental uint8
 }
 
 func (p PriorityParam) IsZero() bool {
index 9933c9f8c7487b62324558e18c2c878cb5e363d7..9921ca096d39f6f673c01cb598a1c166972b0e28 100644 (file)
@@ -15,21 +15,32 @@ import (
        "runtime"
        "strconv"
        "sync"
+       "sync/atomic"
 )
 
 var DebugGoroutines = os.Getenv("DEBUG_HTTP2_GOROUTINES") == "1"
 
+// Setting DebugGoroutines to false during a test to disable goroutine debugging
+// results in race detector complaints when a test leaves goroutines running before
+// returning. Tests shouldn't do this, of course, but when they do it generally shows
+// up as infrequent, hard-to-debug flakes. (See #66519.)
+//
+// Disable goroutine debugging during individual tests with an atomic bool.
+// (Note that it's safe to enable/disable debugging mid-test, so the actual race condition
+// here is harmless.)
+var disableDebugGoroutines atomic.Bool
+
 type goroutineLock uint64
 
 func newGoroutineLock() goroutineLock {
-       if !DebugGoroutines {
+       if !DebugGoroutines || disableDebugGoroutines.Load() {
                return 0
        }
        return goroutineLock(curGoroutineID())
 }
 
 func (g goroutineLock) check() {
-       if !DebugGoroutines {
+       if !DebugGoroutines || disableDebugGoroutines.Load() {
                return
        }
        if curGoroutineID() != uint64(g) {
@@ -38,7 +49,7 @@ func (g goroutineLock) check() {
 }
 
 func (g goroutineLock) checkNotOn() {
-       if !DebugGoroutines {
+       if !DebugGoroutines || disableDebugGoroutines.Load() {
                return
        }
        if curGoroutineID() == uint64(g) {
index ea5ae629fde0e36e375b44f72910d62d7162b458..105fe12fefaa5eeaef8557ec1f7363096236cdb5 100644 (file)
@@ -15,7 +15,6 @@ package http2 // import "golang.org/x/net/http2"
 
 import (
        "bufio"
-       "context"
        "crypto/tls"
        "errors"
        "fmt"
@@ -35,7 +34,6 @@ var (
        VerboseLogs    bool
        logFrameWrites bool
        logFrameReads  bool
-       inTests        bool
 
        // Enabling extended CONNECT by causes browsers to attempt to use
        // WebSockets-over-HTTP/2. This results in problems when the server's websocket
@@ -255,15 +253,13 @@ func (cw closeWaiter) Wait() {
 // idle memory usage with many connections.
 type bufferedWriter struct {
        _           incomparable
-       group       synctestGroupInterface // immutable
-       conn        net.Conn               // immutable
-       bw          *bufio.Writer          // non-nil when data is buffered
-       byteTimeout time.Duration          // immutable, WriteByteTimeout
+       conn        net.Conn      // immutable
+       bw          *bufio.Writer // non-nil when data is buffered
+       byteTimeout time.Duration // immutable, WriteByteTimeout
 }
 
-func newBufferedWriter(group synctestGroupInterface, conn net.Conn, timeout time.Duration) *bufferedWriter {
+func newBufferedWriter(conn net.Conn, timeout time.Duration) *bufferedWriter {
        return &bufferedWriter{
-               group:       group,
                conn:        conn,
                byteTimeout: timeout,
        }
@@ -314,24 +310,18 @@ func (w *bufferedWriter) Flush() error {
 type bufferedWriterTimeoutWriter bufferedWriter
 
 func (w *bufferedWriterTimeoutWriter) Write(p []byte) (n int, err error) {
-       return writeWithByteTimeout(w.group, w.conn, w.byteTimeout, p)
+       return writeWithByteTimeout(w.conn, w.byteTimeout, p)
 }
 
 // writeWithByteTimeout writes to conn.
 // If more than timeout passes without any bytes being written to the connection,
 // the write fails.
-func writeWithByteTimeout(group synctestGroupInterface, conn net.Conn, timeout time.Duration, p []byte) (n int, err error) {
+func writeWithByteTimeout(conn net.Conn, timeout time.Duration, p []byte) (n int, err error) {
        if timeout <= 0 {
                return conn.Write(p)
        }
        for {
-               var now time.Time
-               if group == nil {
-                       now = time.Now()
-               } else {
-                       now = group.Now()
-               }
-               conn.SetWriteDeadline(now.Add(timeout))
+               conn.SetWriteDeadline(time.Now().Add(timeout))
                nn, err := conn.Write(p[n:])
                n += nn
                if n == len(p) || nn == 0 || !errors.Is(err, os.ErrDeadlineExceeded) {
@@ -417,14 +407,3 @@ func (s *sorter) SortStrings(ss []string) {
 // makes that struct also non-comparable, and generally doesn't add
 // any size (as long as it's first).
 type incomparable [0]func()
-
-// synctestGroupInterface is the methods of synctestGroup used by Server and Transport.
-// It's defined as an interface here to let us keep synctestGroup entirely test-only
-// and not a part of non-test builds.
-type synctestGroupInterface interface {
-       Join()
-       Now() time.Time
-       NewTimer(d time.Duration) timer
-       AfterFunc(d time.Duration, f func()) timer
-       ContextWithTimeout(ctx context.Context, d time.Duration) (context.Context, context.CancelFunc)
-}
index 51fca38f61d726e0b45bd6cd9f56f21f48c8a2ca..bdc5520ebd3e53b6b7f400e448cf15a92a08747d 100644 (file)
@@ -176,44 +176,15 @@ type Server struct {
        // so that we don't embed a Mutex in this struct, which will make the
        // struct non-copyable, which might break some callers.
        state *serverInternalState
-
-       // Synchronization group used for testing.
-       // Outside of tests, this is nil.
-       group synctestGroupInterface
-}
-
-func (s *Server) markNewGoroutine() {
-       if s.group != nil {
-               s.group.Join()
-       }
-}
-
-func (s *Server) now() time.Time {
-       if s.group != nil {
-               return s.group.Now()
-       }
-       return time.Now()
-}
-
-// newTimer creates a new time.Timer, or a synthetic timer in tests.
-func (s *Server) newTimer(d time.Duration) timer {
-       if s.group != nil {
-               return s.group.NewTimer(d)
-       }
-       return timeTimer{time.NewTimer(d)}
-}
-
-// afterFunc creates a new time.AfterFunc timer, or a synthetic timer in tests.
-func (s *Server) afterFunc(d time.Duration, f func()) timer {
-       if s.group != nil {
-               return s.group.AfterFunc(d, f)
-       }
-       return timeTimer{time.AfterFunc(d, f)}
 }
 
 type serverInternalState struct {
        mu          sync.Mutex
        activeConns map[*serverConn]struct{}
+
+       // Pool of error channels. This is per-Server rather than global
+       // because channels can't be reused across synctest bubbles.
+       errChanPool sync.Pool
 }
 
 func (s *serverInternalState) registerConn(sc *serverConn) {
@@ -245,6 +216,27 @@ func (s *serverInternalState) startGracefulShutdown() {
        s.mu.Unlock()
 }
 
+// Global error channel pool used for uninitialized Servers.
+// We use a per-Server pool when possible to avoid using channels across synctest bubbles.
+var errChanPool = sync.Pool{
+       New: func() any { return make(chan error, 1) },
+}
+
+func (s *serverInternalState) getErrChan() chan error {
+       if s == nil {
+               return errChanPool.Get().(chan error) // Server used without calling ConfigureServer
+       }
+       return s.errChanPool.Get().(chan error)
+}
+
+func (s *serverInternalState) putErrChan(ch chan error) {
+       if s == nil {
+               errChanPool.Put(ch) // Server used without calling ConfigureServer
+               return
+       }
+       s.errChanPool.Put(ch)
+}
+
 // ConfigureServer adds HTTP/2 support to a net/http Server.
 //
 // The configuration conf may be nil.
@@ -257,7 +249,10 @@ func ConfigureServer(s *http.Server, conf *Server) error {
        if conf == nil {
                conf = new(Server)
        }
-       conf.state = &serverInternalState{activeConns: make(map[*serverConn]struct{})}
+       conf.state = &serverInternalState{
+               activeConns: make(map[*serverConn]struct{}),
+               errChanPool: sync.Pool{New: func() any { return make(chan error, 1) }},
+       }
        if h1, h2 := s, conf; h2.IdleTimeout == 0 {
                if h1.IdleTimeout != 0 {
                        h2.IdleTimeout = h1.IdleTimeout
@@ -423,6 +418,9 @@ func (o *ServeConnOpts) handler() http.Handler {
 //
 // The opts parameter is optional. If nil, default values are used.
 func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
+       if opts == nil {
+               opts = &ServeConnOpts{}
+       }
        s.serveConn(c, opts, nil)
 }
 
@@ -438,7 +436,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon
                conn:                        c,
                baseCtx:                     baseCtx,
                remoteAddrStr:               c.RemoteAddr().String(),
-               bw:                          newBufferedWriter(s.group, c, conf.WriteByteTimeout),
+               bw:                          newBufferedWriter(c, conf.WriteByteTimeout),
                handler:                     opts.handler(),
                streams:                     make(map[uint32]*stream),
                readFrameCh:                 make(chan readFrameResult),
@@ -638,11 +636,11 @@ type serverConn struct {
        pingSent                    bool
        sentPingData                [8]byte
        goAwayCode                  ErrCode
-       shutdownTimer               timer // nil until used
-       idleTimer                   timer // nil if unused
+       shutdownTimer               *time.Timer // nil until used
+       idleTimer                   *time.Timer // nil if unused
        readIdleTimeout             time.Duration
        pingTimeout                 time.Duration
-       readIdleTimer               timer // nil if unused
+       readIdleTimer               *time.Timer // nil if unused
 
        // Owned by the writeFrameAsync goroutine:
        headerWriteBuf bytes.Buffer
@@ -687,12 +685,12 @@ type stream struct {
        flow             outflow // limits writing from Handler to client
        inflow           inflow  // what the client is allowed to POST/etc to us
        state            streamState
-       resetQueued      bool  // RST_STREAM queued for write; set by sc.resetStream
-       gotTrailerHeader bool  // HEADER frame for trailers was seen
-       wroteHeaders     bool  // whether we wrote headers (not status 100)
-       readDeadline     timer // nil if unused
-       writeDeadline    timer // nil if unused
-       closeErr         error // set before cw is closed
+       resetQueued      bool        // RST_STREAM queued for write; set by sc.resetStream
+       gotTrailerHeader bool        // HEADER frame for trailers was seen
+       wroteHeaders     bool        // whether we wrote headers (not status 100)
+       readDeadline     *time.Timer // nil if unused
+       writeDeadline    *time.Timer // nil if unused
+       closeErr         error       // set before cw is closed
 
        trailer    http.Header // accumulated trailers
        reqTrailer http.Header // handler's Request.Trailer
@@ -848,7 +846,6 @@ type readFrameResult struct {
 // consumer is done with the frame.
 // It's run on its own goroutine.
 func (sc *serverConn) readFrames() {
-       sc.srv.markNewGoroutine()
        gate := make(chan struct{})
        gateDone := func() { gate <- struct{}{} }
        for {
@@ -881,7 +878,6 @@ type frameWriteResult struct {
 // At most one goroutine can be running writeFrameAsync at a time per
 // serverConn.
 func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest, wd *writeData) {
-       sc.srv.markNewGoroutine()
        var err error
        if wd == nil {
                err = wr.write.writeFrame(sc)
@@ -965,22 +961,22 @@ func (sc *serverConn) serve(conf http2Config) {
        sc.setConnState(http.StateIdle)
 
        if sc.srv.IdleTimeout > 0 {
-               sc.idleTimer = sc.srv.afterFunc(sc.srv.IdleTimeout, sc.onIdleTimer)
+               sc.idleTimer = time.AfterFunc(sc.srv.IdleTimeout, sc.onIdleTimer)
                defer sc.idleTimer.Stop()
        }
 
        if conf.SendPingTimeout > 0 {
                sc.readIdleTimeout = conf.SendPingTimeout
-               sc.readIdleTimer = sc.srv.afterFunc(conf.SendPingTimeout, sc.onReadIdleTimer)
+               sc.readIdleTimer = time.AfterFunc(conf.SendPingTimeout, sc.onReadIdleTimer)
                defer sc.readIdleTimer.Stop()
        }
 
        go sc.readFrames() // closed by defer sc.conn.Close above
 
-       settingsTimer := sc.srv.afterFunc(firstSettingsTimeout, sc.onSettingsTimer)
+       settingsTimer := time.AfterFunc(firstSettingsTimeout, sc.onSettingsTimer)
        defer settingsTimer.Stop()
 
-       lastFrameTime := sc.srv.now()
+       lastFrameTime := time.Now()
        loopNum := 0
        for {
                loopNum++
@@ -994,7 +990,7 @@ func (sc *serverConn) serve(conf http2Config) {
                case res := <-sc.wroteFrameCh:
                        sc.wroteFrame(res)
                case res := <-sc.readFrameCh:
-                       lastFrameTime = sc.srv.now()
+                       lastFrameTime = time.Now()
                        // Process any written frames before reading new frames from the client since a
                        // written frame could have triggered a new stream to be started.
                        if sc.writingFrameAsync {
@@ -1077,7 +1073,7 @@ func (sc *serverConn) handlePingTimer(lastFrameReadTime time.Time) {
        }
 
        pingAt := lastFrameReadTime.Add(sc.readIdleTimeout)
-       now := sc.srv.now()
+       now := time.Now()
        if pingAt.After(now) {
                // We received frames since arming the ping timer.
                // Reset it for the next possible timeout.
@@ -1141,10 +1137,10 @@ func (sc *serverConn) readPreface() error {
                        errc <- nil
                }
        }()
-       timer := sc.srv.newTimer(prefaceTimeout) // TODO: configurable on *Server?
+       timer := time.NewTimer(prefaceTimeout) // TODO: configurable on *Server?
        defer timer.Stop()
        select {
-       case <-timer.C():
+       case <-timer.C:
                return errPrefaceTimeout
        case err := <-errc:
                if err == nil {
@@ -1156,10 +1152,6 @@ func (sc *serverConn) readPreface() error {
        }
 }
 
-var errChanPool = sync.Pool{
-       New: func() interface{} { return make(chan error, 1) },
-}
-
 var writeDataPool = sync.Pool{
        New: func() interface{} { return new(writeData) },
 }
@@ -1167,7 +1159,7 @@ var writeDataPool = sync.Pool{
 // writeDataFromHandler writes DATA response frames from a handler on
 // the given stream.
 func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStream bool) error {
-       ch := errChanPool.Get().(chan error)
+       ch := sc.srv.state.getErrChan()
        writeArg := writeDataPool.Get().(*writeData)
        *writeArg = writeData{stream.id, data, endStream}
        err := sc.writeFrameFromHandler(FrameWriteRequest{
@@ -1199,7 +1191,7 @@ func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStrea
                        return errStreamClosed
                }
        }
-       errChanPool.Put(ch)
+       sc.srv.state.putErrChan(ch)
        if frameWriteDone {
                writeDataPool.Put(writeArg)
        }
@@ -1513,7 +1505,7 @@ func (sc *serverConn) goAway(code ErrCode) {
 
 func (sc *serverConn) shutDownIn(d time.Duration) {
        sc.serveG.check()
-       sc.shutdownTimer = sc.srv.afterFunc(d, sc.onShutdownTimer)
+       sc.shutdownTimer = time.AfterFunc(d, sc.onShutdownTimer)
 }
 
 func (sc *serverConn) resetStream(se StreamError) {
@@ -2118,7 +2110,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
        // (in Go 1.8), though. That's a more sane option anyway.
        if sc.hs.ReadTimeout > 0 {
                sc.conn.SetReadDeadline(time.Time{})
-               st.readDeadline = sc.srv.afterFunc(sc.hs.ReadTimeout, st.onReadTimeout)
+               st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout)
        }
 
        return sc.scheduleHandler(id, rw, req, handler)
@@ -2216,7 +2208,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
        st.flow.add(sc.initialStreamSendWindowSize)
        st.inflow.init(sc.initialStreamRecvWindowSize)
        if sc.hs.WriteTimeout > 0 {
-               st.writeDeadline = sc.srv.afterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
+               st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
        }
 
        sc.streams[id] = st
@@ -2405,7 +2397,6 @@ func (sc *serverConn) handlerDone() {
 
 // Run on its own goroutine.
 func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) {
-       sc.srv.markNewGoroutine()
        defer sc.sendServeMsg(handlerDoneMsg)
        didPanic := true
        defer func() {
@@ -2454,7 +2445,7 @@ func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) erro
                // waiting for this frame to be written, so an http.Flush mid-handler
                // writes out the correct value of keys, before a handler later potentially
                // mutates it.
-               errc = errChanPool.Get().(chan error)
+               errc = sc.srv.state.getErrChan()
        }
        if err := sc.writeFrameFromHandler(FrameWriteRequest{
                write:  headerData,
@@ -2466,7 +2457,7 @@ func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) erro
        if errc != nil {
                select {
                case err := <-errc:
-                       errChanPool.Put(errc)
+                       sc.srv.state.putErrChan(errc)
                        return err
                case <-sc.doneServing:
                        return errClientDisconnected
@@ -2573,7 +2564,7 @@ func (b *requestBody) Read(p []byte) (n int, err error) {
        if err == io.EOF {
                b.sawEOF = true
        }
-       if b.conn == nil && inTests {
+       if b.conn == nil {
                return
        }
        b.conn.noteBodyReadFromHandler(b.stream, n, err)
@@ -2702,7 +2693,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
                var date string
                if _, ok := rws.snapHeader["Date"]; !ok {
                        // TODO(bradfitz): be faster here, like net/http? measure.
-                       date = rws.conn.srv.now().UTC().Format(http.TimeFormat)
+                       date = time.Now().UTC().Format(http.TimeFormat)
                }
 
                for _, v := range rws.snapHeader["Trailer"] {
@@ -2824,7 +2815,7 @@ func (rws *responseWriterState) promoteUndeclaredTrailers() {
 
 func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
        st := w.rws.stream
-       if !deadline.IsZero() && deadline.Before(w.rws.conn.srv.now()) {
+       if !deadline.IsZero() && deadline.Before(time.Now()) {
                // If we're setting a deadline in the past, reset the stream immediately
                // so writes after SetWriteDeadline returns will fail.
                st.onReadTimeout()
@@ -2840,9 +2831,9 @@ func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
                if deadline.IsZero() {
                        st.readDeadline = nil
                } else if st.readDeadline == nil {
-                       st.readDeadline = sc.srv.afterFunc(deadline.Sub(sc.srv.now()), st.onReadTimeout)
+                       st.readDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onReadTimeout)
                } else {
-                       st.readDeadline.Reset(deadline.Sub(sc.srv.now()))
+                       st.readDeadline.Reset(deadline.Sub(time.Now()))
                }
        })
        return nil
@@ -2850,7 +2841,7 @@ func (w *responseWriter) SetReadDeadline(deadline time.Time) error {
 
 func (w *responseWriter) SetWriteDeadline(deadline time.Time) error {
        st := w.rws.stream
-       if !deadline.IsZero() && deadline.Before(w.rws.conn.srv.now()) {
+       if !deadline.IsZero() && deadline.Before(time.Now()) {
                // If we're setting a deadline in the past, reset the stream immediately
                // so writes after SetWriteDeadline returns will fail.
                st.onWriteTimeout()
@@ -2866,9 +2857,9 @@ func (w *responseWriter) SetWriteDeadline(deadline time.Time) error {
                if deadline.IsZero() {
                        st.writeDeadline = nil
                } else if st.writeDeadline == nil {
-                       st.writeDeadline = sc.srv.afterFunc(deadline.Sub(sc.srv.now()), st.onWriteTimeout)
+                       st.writeDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onWriteTimeout)
                } else {
-                       st.writeDeadline.Reset(deadline.Sub(sc.srv.now()))
+                       st.writeDeadline.Reset(deadline.Sub(time.Now()))
                }
        })
        return nil
@@ -3147,7 +3138,7 @@ func (w *responseWriter) Push(target string, opts *http.PushOptions) error {
                method: opts.Method,
                url:    u,
                header: cloneHeader(opts.Header),
-               done:   errChanPool.Get().(chan error),
+               done:   sc.srv.state.getErrChan(),
        }
 
        select {
@@ -3164,7 +3155,7 @@ func (w *responseWriter) Push(target string, opts *http.PushOptions) error {
        case <-st.cw:
                return errStreamClosed
        case err := <-msg.done:
-               errChanPool.Put(msg.done)
+               sc.srv.state.putErrChan(msg.done)
                return err
        }
 }
diff --git a/vendor/golang.org/x/net/http2/timer.go b/vendor/golang.org/x/net/http2/timer.go
deleted file mode 100644 (file)
index 0b1c17b..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-package http2
-
-import "time"
-
-// A timer is a time.Timer, as an interface which can be replaced in tests.
-type timer = interface {
-       C() <-chan time.Time
-       Reset(d time.Duration) bool
-       Stop() bool
-}
-
-// timeTimer adapts a time.Timer to the timer interface.
-type timeTimer struct {
-       *time.Timer
-}
-
-func (t timeTimer) C() <-chan time.Time { return t.Timer.C }
index f26356b9cd9140782a8d0a19ad4bde04095a9fdf..1965913e543b4750020b4f79c2f69f8814ec7b1e 100644 (file)
@@ -9,6 +9,7 @@ package http2
 import (
        "bufio"
        "bytes"
+       "compress/flate"
        "compress/gzip"
        "context"
        "crypto/rand"
@@ -193,50 +194,6 @@ type Transport struct {
 
 type transportTestHooks struct {
        newclientconn func(*ClientConn)
-       group         synctestGroupInterface
-}
-
-func (t *Transport) markNewGoroutine() {
-       if t != nil && t.transportTestHooks != nil {
-               t.transportTestHooks.group.Join()
-       }
-}
-
-func (t *Transport) now() time.Time {
-       if t != nil && t.transportTestHooks != nil {
-               return t.transportTestHooks.group.Now()
-       }
-       return time.Now()
-}
-
-func (t *Transport) timeSince(when time.Time) time.Duration {
-       if t != nil && t.transportTestHooks != nil {
-               return t.now().Sub(when)
-       }
-       return time.Since(when)
-}
-
-// newTimer creates a new time.Timer, or a synthetic timer in tests.
-func (t *Transport) newTimer(d time.Duration) timer {
-       if t.transportTestHooks != nil {
-               return t.transportTestHooks.group.NewTimer(d)
-       }
-       return timeTimer{time.NewTimer(d)}
-}
-
-// afterFunc creates a new time.AfterFunc timer, or a synthetic timer in tests.
-func (t *Transport) afterFunc(d time.Duration, f func()) timer {
-       if t.transportTestHooks != nil {
-               return t.transportTestHooks.group.AfterFunc(d, f)
-       }
-       return timeTimer{time.AfterFunc(d, f)}
-}
-
-func (t *Transport) contextWithTimeout(ctx context.Context, d time.Duration) (context.Context, context.CancelFunc) {
-       if t.transportTestHooks != nil {
-               return t.transportTestHooks.group.ContextWithTimeout(ctx, d)
-       }
-       return context.WithTimeout(ctx, d)
 }
 
 func (t *Transport) maxHeaderListSize() uint32 {
@@ -366,7 +323,7 @@ type ClientConn struct {
        readerErr  error         // set before readerDone is closed
 
        idleTimeout time.Duration // or 0 for never
-       idleTimer   timer
+       idleTimer   *time.Timer
 
        mu               sync.Mutex // guards following
        cond             *sync.Cond // hold mu; broadcast on flow/closed changes
@@ -399,6 +356,7 @@ type ClientConn struct {
        readIdleTimeout             time.Duration
        pingTimeout                 time.Duration
        extendedConnectAllowed      bool
+       strictMaxConcurrentStreams  bool
 
        // rstStreamPingsBlocked works around an unfortunate gRPC behavior.
        // gRPC strictly limits the number of PING frames that it will receive.
@@ -534,14 +492,12 @@ func (cs *clientStream) closeReqBodyLocked() {
        cs.reqBodyClosed = make(chan struct{})
        reqBodyClosed := cs.reqBodyClosed
        go func() {
-               cs.cc.t.markNewGoroutine()
                cs.reqBody.Close()
                close(reqBodyClosed)
        }()
 }
 
 type stickyErrWriter struct {
-       group   synctestGroupInterface
        conn    net.Conn
        timeout time.Duration
        err     *error
@@ -551,7 +507,7 @@ func (sew stickyErrWriter) Write(p []byte) (n int, err error) {
        if *sew.err != nil {
                return 0, *sew.err
        }
-       n, err = writeWithByteTimeout(sew.group, sew.conn, sew.timeout, p)
+       n, err = writeWithByteTimeout(sew.conn, sew.timeout, p)
        *sew.err = err
        return n, err
 }
@@ -650,9 +606,9 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
                                backoff := float64(uint(1) << (uint(retry) - 1))
                                backoff += backoff * (0.1 * mathrand.Float64())
                                d := time.Second * time.Duration(backoff)
-                               tm := t.newTimer(d)
+                               tm := time.NewTimer(d)
                                select {
-                               case <-tm.C():
+                               case <-tm.C:
                                        t.vlogf("RoundTrip retrying after failure: %v", roundTripErr)
                                        continue
                                case <-req.Context().Done():
@@ -699,6 +655,7 @@ var (
        errClientConnUnusable       = errors.New("http2: client conn not usable")
        errClientConnNotEstablished = errors.New("http2: client conn could not be established")
        errClientConnGotGoAway      = errors.New("http2: Transport received Server's graceful shutdown GOAWAY")
+       errClientConnForceClosed    = errors.New("http2: client connection force closed via ClientConn.Close")
 )
 
 // shouldRetryRequest is called by RoundTrip when a request fails to get
@@ -829,7 +786,8 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
                initialWindowSize:           65535,    // spec default
                initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream,
                maxConcurrentStreams:        initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings.
-               peerMaxHeaderListSize:       0xffffffffffffffff,          // "infinite", per spec. Use 2^64-1 instead.
+               strictMaxConcurrentStreams:  conf.StrictMaxConcurrentRequests,
+               peerMaxHeaderListSize:       0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead.
                streams:                     make(map[uint32]*clientStream),
                singleUse:                   singleUse,
                seenSettingsChan:            make(chan struct{}),
@@ -838,14 +796,11 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
                pingTimeout:                 conf.PingTimeout,
                pings:                       make(map[[8]byte]chan struct{}),
                reqHeaderMu:                 make(chan struct{}, 1),
-               lastActive:                  t.now(),
+               lastActive:                  time.Now(),
        }
-       var group synctestGroupInterface
        if t.transportTestHooks != nil {
-               t.markNewGoroutine()
                t.transportTestHooks.newclientconn(cc)
                c = cc.tconn
-               group = t.group
        }
        if VerboseLogs {
                t.vlogf("http2: Transport creating client conn %p to %v", cc, c.RemoteAddr())
@@ -857,7 +812,6 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
        // TODO: adjust this writer size to account for frame size +
        // MTU + crypto/tls record padding.
        cc.bw = bufio.NewWriter(stickyErrWriter{
-               group:   group,
                conn:    c,
                timeout: conf.WriteByteTimeout,
                err:     &cc.werr,
@@ -906,7 +860,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
        // Start the idle timer after the connection is fully initialized.
        if d := t.idleConnTimeout(); d != 0 {
                cc.idleTimeout = d
-               cc.idleTimer = t.afterFunc(d, cc.onIdleTimeout)
+               cc.idleTimer = time.AfterFunc(d, cc.onIdleTimeout)
        }
 
        go cc.readLoop()
@@ -917,7 +871,7 @@ func (cc *ClientConn) healthCheck() {
        pingTimeout := cc.pingTimeout
        // We don't need to periodically ping in the health check, because the readLoop of ClientConn will
        // trigger the healthCheck again if there is no frame received.
-       ctx, cancel := cc.t.contextWithTimeout(context.Background(), pingTimeout)
+       ctx, cancel := context.WithTimeout(context.Background(), pingTimeout)
        defer cancel()
        cc.vlogf("http2: Transport sending health check")
        err := cc.Ping(ctx)
@@ -1067,7 +1021,7 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) {
                return
        }
        var maxConcurrentOkay bool
-       if cc.t.StrictMaxConcurrentStreams {
+       if cc.strictMaxConcurrentStreams {
                // We'll tell the caller we can take a new request to
                // prevent the caller from dialing a new TCP
                // connection, but then we'll block later before
@@ -1120,7 +1074,7 @@ func (cc *ClientConn) tooIdleLocked() bool {
        // times are compared based on their wall time. We don't want
        // to reuse a connection that's been sitting idle during
        // VM/laptop suspend if monotonic time was also frozen.
-       return cc.idleTimeout != 0 && !cc.lastIdle.IsZero() && cc.t.timeSince(cc.lastIdle.Round(0)) > cc.idleTimeout
+       return cc.idleTimeout != 0 && !cc.lastIdle.IsZero() && time.Since(cc.lastIdle.Round(0)) > cc.idleTimeout
 }
 
 // onIdleTimeout is called from a time.AfterFunc goroutine. It will
@@ -1186,7 +1140,6 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error {
        done := make(chan struct{})
        cancelled := false // guarded by cc.mu
        go func() {
-               cc.t.markNewGoroutine()
                cc.mu.Lock()
                defer cc.mu.Unlock()
                for {
@@ -1257,8 +1210,7 @@ func (cc *ClientConn) closeForError(err error) {
 //
 // In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
 func (cc *ClientConn) Close() error {
-       err := errors.New("http2: client connection force closed via ClientConn.Close")
-       cc.closeForError(err)
+       cc.closeForError(errClientConnForceClosed)
        return nil
 }
 
@@ -1427,7 +1379,6 @@ func (cc *ClientConn) roundTrip(req *http.Request, streamf func(*clientStream))
 //
 // It sends the request and performs post-request cleanup (closing Request.Body, etc.).
 func (cs *clientStream) doRequest(req *http.Request, streamf func(*clientStream)) {
-       cs.cc.t.markNewGoroutine()
        err := cs.writeRequest(req, streamf)
        cs.cleanupWriteRequest(err)
 }
@@ -1558,9 +1509,9 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre
        var respHeaderTimer <-chan time.Time
        var respHeaderRecv chan struct{}
        if d := cc.responseHeaderTimeout(); d != 0 {
-               timer := cc.t.newTimer(d)
+               timer := time.NewTimer(d)
                defer timer.Stop()
-               respHeaderTimer = timer.C()
+               respHeaderTimer = timer.C
                respHeaderRecv = cs.respHeaderRecv
        }
        // Wait until the peer half-closes its end of the stream,
@@ -1753,7 +1704,7 @@ func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error {
                        // Return a fatal error which aborts the retry loop.
                        return errClientConnNotEstablished
                }
-               cc.lastActive = cc.t.now()
+               cc.lastActive = time.Now()
                if cc.closed || !cc.canTakeNewRequestLocked() {
                        return errClientConnUnusable
                }
@@ -2092,10 +2043,10 @@ func (cc *ClientConn) forgetStreamID(id uint32) {
        if len(cc.streams) != slen-1 {
                panic("forgetting unknown stream id")
        }
-       cc.lastActive = cc.t.now()
+       cc.lastActive = time.Now()
        if len(cc.streams) == 0 && cc.idleTimer != nil {
                cc.idleTimer.Reset(cc.idleTimeout)
-               cc.lastIdle = cc.t.now()
+               cc.lastIdle = time.Now()
        }
        // Wake up writeRequestBody via clientStream.awaitFlowControl and
        // wake up RoundTrip if there is a pending request.
@@ -2121,7 +2072,6 @@ type clientConnReadLoop struct {
 
 // readLoop runs in its own goroutine and reads and dispatches frames.
 func (cc *ClientConn) readLoop() {
-       cc.t.markNewGoroutine()
        rl := &clientConnReadLoop{cc: cc}
        defer rl.cleanup()
        cc.readerErr = rl.run()
@@ -2188,9 +2138,9 @@ func (rl *clientConnReadLoop) cleanup() {
        if cc.idleTimeout > 0 && unusedWaitTime > cc.idleTimeout {
                unusedWaitTime = cc.idleTimeout
        }
-       idleTime := cc.t.now().Sub(cc.lastActive)
+       idleTime := time.Now().Sub(cc.lastActive)
        if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime && !cc.closedOnIdle {
-               cc.idleTimer = cc.t.afterFunc(unusedWaitTime-idleTime, func() {
+               cc.idleTimer = time.AfterFunc(unusedWaitTime-idleTime, func() {
                        cc.t.connPool().MarkDead(cc)
                })
        } else {
@@ -2250,9 +2200,9 @@ func (rl *clientConnReadLoop) run() error {
        cc := rl.cc
        gotSettings := false
        readIdleTimeout := cc.readIdleTimeout
-       var t timer
+       var t *time.Timer
        if readIdleTimeout != 0 {
-               t = cc.t.afterFunc(readIdleTimeout, cc.healthCheck)
+               t = time.AfterFunc(readIdleTimeout, cc.healthCheck)
        }
        for {
                f, err := cc.fr.ReadFrame()
@@ -2998,7 +2948,6 @@ func (cc *ClientConn) Ping(ctx context.Context) error {
        var pingError error
        errc := make(chan struct{})
        go func() {
-               cc.t.markNewGoroutine()
                cc.wmu.Lock()
                defer cc.wmu.Unlock()
                if pingError = cc.fr.WritePing(false, p); pingError != nil {
@@ -3128,35 +3077,102 @@ type erringRoundTripper struct{ err error }
 func (rt erringRoundTripper) RoundTripErr() error                             { return rt.err }
 func (rt erringRoundTripper) RoundTrip(*http.Request) (*http.Response, error) { return nil, rt.err }
 
+var errConcurrentReadOnResBody = errors.New("http2: concurrent read on response body")
+
 // gzipReader wraps a response body so it can lazily
-// call gzip.NewReader on the first call to Read
+// get gzip.Reader from the pool on the first call to Read.
+// After Close is called it puts gzip.Reader to the pool immediately
+// if there is no Read in progress or later when Read completes.
 type gzipReader struct {
        _    incomparable
        body io.ReadCloser // underlying Response.Body
-       zr   *gzip.Reader  // lazily-initialized gzip reader
-       zerr error         // sticky error
+       mu   sync.Mutex    // guards zr and zerr
+       zr   *gzip.Reader  // stores gzip reader from the pool between reads
+       zerr error         // sticky gzip reader init error or sentinel value to detect concurrent read and read after close
 }
 
-func (gz *gzipReader) Read(p []byte) (n int, err error) {
+type eofReader struct{}
+
+func (eofReader) Read([]byte) (int, error) { return 0, io.EOF }
+func (eofReader) ReadByte() (byte, error)  { return 0, io.EOF }
+
+var gzipPool = sync.Pool{New: func() any { return new(gzip.Reader) }}
+
+// gzipPoolGet gets a gzip.Reader from the pool and resets it to read from r.
+func gzipPoolGet(r io.Reader) (*gzip.Reader, error) {
+       zr := gzipPool.Get().(*gzip.Reader)
+       if err := zr.Reset(r); err != nil {
+               gzipPoolPut(zr)
+               return nil, err
+       }
+       return zr, nil
+}
+
+// gzipPoolPut puts a gzip.Reader back into the pool.
+func gzipPoolPut(zr *gzip.Reader) {
+       // Reset will allocate bufio.Reader if we pass it anything
+       // other than a flate.Reader, so ensure that it's getting one.
+       var r flate.Reader = eofReader{}
+       zr.Reset(r)
+       gzipPool.Put(zr)
+}
+
+// acquire returns a gzip.Reader for reading response body.
+// The reader must be released after use.
+func (gz *gzipReader) acquire() (*gzip.Reader, error) {
+       gz.mu.Lock()
+       defer gz.mu.Unlock()
        if gz.zerr != nil {
-               return 0, gz.zerr
+               return nil, gz.zerr
        }
        if gz.zr == nil {
-               gz.zr, err = gzip.NewReader(gz.body)
-               if err != nil {
-                       gz.zerr = err
-                       return 0, err
+               gz.zr, gz.zerr = gzipPoolGet(gz.body)
+               if gz.zerr != nil {
+                       return nil, gz.zerr
                }
        }
-       return gz.zr.Read(p)
+       ret := gz.zr
+       gz.zr, gz.zerr = nil, errConcurrentReadOnResBody
+       return ret, nil
 }
 
-func (gz *gzipReader) Close() error {
-       if err := gz.body.Close(); err != nil {
-               return err
+// release returns the gzip.Reader to the pool if Close was called during Read.
+func (gz *gzipReader) release(zr *gzip.Reader) {
+       gz.mu.Lock()
+       defer gz.mu.Unlock()
+       if gz.zerr == errConcurrentReadOnResBody {
+               gz.zr, gz.zerr = zr, nil
+       } else { // fs.ErrClosed
+               gzipPoolPut(zr)
+       }
+}
+
+// close returns the gzip.Reader to the pool immediately or
+// signals release to do so after Read completes.
+func (gz *gzipReader) close() {
+       gz.mu.Lock()
+       defer gz.mu.Unlock()
+       if gz.zerr == nil && gz.zr != nil {
+               gzipPoolPut(gz.zr)
+               gz.zr = nil
        }
        gz.zerr = fs.ErrClosed
-       return nil
+}
+
+func (gz *gzipReader) Read(p []byte) (n int, err error) {
+       zr, err := gz.acquire()
+       if err != nil {
+               return 0, err
+       }
+       defer gz.release(zr)
+
+       return zr.Read(p)
+}
+
+func (gz *gzipReader) Close() error {
+       gz.close()
+
+       return gz.body.Close()
 }
 
 type errorReader struct{ err error }
@@ -3228,7 +3244,7 @@ func traceGotConn(req *http.Request, cc *ClientConn, reused bool) {
        cc.mu.Lock()
        ci.WasIdle = len(cc.streams) == 0 && reused
        if ci.WasIdle && !cc.lastActive.IsZero() {
-               ci.IdleTime = cc.t.timeSince(cc.lastActive)
+               ci.IdleTime = time.Since(cc.lastActive)
        }
        cc.mu.Unlock()
 
index cc893adc29afb0a6cde1e623842f50c83a638857..7de27be52509404e3d1b9664dc0eeaeb9d069138 100644 (file)
@@ -42,6 +42,8 @@ type OpenStreamOptions struct {
        // PusherID is zero if the stream was initiated by the client. Otherwise,
        // PusherID names the stream that pushed the newly opened stream.
        PusherID uint32
+       // priority is used to set the priority of the newly opened stream.
+       priority PriorityParam
 }
 
 // FrameWriteRequest is a request to write a frame.
@@ -183,45 +185,75 @@ func (wr *FrameWriteRequest) replyToWriter(err error) {
 }
 
 // writeQueue is used by implementations of WriteScheduler.
+//
+// Each writeQueue contains a queue of FrameWriteRequests, meant to store all
+// FrameWriteRequests associated with a given stream. This is implemented as a
+// two-stage queue: currQueue[currPos:] and nextQueue. Removing an item is done
+// by incrementing currPos of currQueue. Adding an item is done by appending it
+// to the nextQueue. If currQueue is empty when trying to remove an item, we
+// can swap currQueue and nextQueue to remedy the situation.
+// This two-stage queue is analogous to the use of two lists in Okasaki's
+// purely functional queue but without the overhead of reversing the list when
+// swapping stages.
+//
+// writeQueue also contains prev and next, this can be used by implementations
+// of WriteScheduler to construct data structures that represent the order of
+// writing between different streams (e.g. circular linked list).
 type writeQueue struct {
-       s          []FrameWriteRequest
+       currQueue []FrameWriteRequest
+       nextQueue []FrameWriteRequest
+       currPos   int
+
        prev, next *writeQueue
 }
 
-func (q *writeQueue) empty() bool { return len(q.s) == 0 }
+func (q *writeQueue) empty() bool {
+       return (len(q.currQueue) - q.currPos + len(q.nextQueue)) == 0
+}
 
 func (q *writeQueue) push(wr FrameWriteRequest) {
-       q.s = append(q.s, wr)
+       q.nextQueue = append(q.nextQueue, wr)
 }
 
 func (q *writeQueue) shift() FrameWriteRequest {
-       if len(q.s) == 0 {
+       if q.empty() {
                panic("invalid use of queue")
        }
-       wr := q.s[0]
-       // TODO: less copy-happy queue.
-       copy(q.s, q.s[1:])
-       q.s[len(q.s)-1] = FrameWriteRequest{}
-       q.s = q.s[:len(q.s)-1]
+       if q.currPos >= len(q.currQueue) {
+               q.currQueue, q.currPos, q.nextQueue = q.nextQueue, 0, q.currQueue[:0]
+       }
+       wr := q.currQueue[q.currPos]
+       q.currQueue[q.currPos] = FrameWriteRequest{}
+       q.currPos++
        return wr
 }
 
+func (q *writeQueue) peek() *FrameWriteRequest {
+       if q.currPos < len(q.currQueue) {
+               return &q.currQueue[q.currPos]
+       }
+       if len(q.nextQueue) > 0 {
+               return &q.nextQueue[0]
+       }
+       return nil
+}
+
 // consume consumes up to n bytes from q.s[0]. If the frame is
 // entirely consumed, it is removed from the queue. If the frame
 // is partially consumed, the frame is kept with the consumed
 // bytes removed. Returns true iff any bytes were consumed.
 func (q *writeQueue) consume(n int32) (FrameWriteRequest, bool) {
-       if len(q.s) == 0 {
+       if q.empty() {
                return FrameWriteRequest{}, false
        }
-       consumed, rest, numresult := q.s[0].Consume(n)
+       consumed, rest, numresult := q.peek().Consume(n)
        switch numresult {
        case 0:
                return FrameWriteRequest{}, false
        case 1:
                q.shift()
        case 2:
-               q.s[0] = rest
+               *q.peek() = rest
        }
        return consumed, true
 }
@@ -230,10 +262,15 @@ type writeQueuePool []*writeQueue
 
 // put inserts an unused writeQueue into the pool.
 func (p *writeQueuePool) put(q *writeQueue) {
-       for i := range q.s {
-               q.s[i] = FrameWriteRequest{}
+       for i := range q.currQueue {
+               q.currQueue[i] = FrameWriteRequest{}
+       }
+       for i := range q.nextQueue {
+               q.nextQueue[i] = FrameWriteRequest{}
        }
-       q.s = q.s[:0]
+       q.currQueue = q.currQueue[:0]
+       q.nextQueue = q.nextQueue[:0]
+       q.currPos = 0
        *p = append(*p, q)
 }
 
diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority.go
deleted file mode 100644 (file)
index f678333..0000000
+++ /dev/null
@@ -1,451 +0,0 @@
-// Copyright 2016 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package http2
-
-import (
-       "fmt"
-       "math"
-       "sort"
-)
-
-// RFC 7540, Section 5.3.5: the default weight is 16.
-const priorityDefaultWeight = 15 // 16 = 15 + 1
-
-// PriorityWriteSchedulerConfig configures a priorityWriteScheduler.
-type PriorityWriteSchedulerConfig struct {
-       // MaxClosedNodesInTree controls the maximum number of closed streams to
-       // retain in the priority tree. Setting this to zero saves a small amount
-       // of memory at the cost of performance.
-       //
-       // See RFC 7540, Section 5.3.4:
-       //   "It is possible for a stream to become closed while prioritization
-       //   information ... is in transit. ... This potentially creates suboptimal
-       //   prioritization, since the stream could be given a priority that is
-       //   different from what is intended. To avoid these problems, an endpoint
-       //   SHOULD retain stream prioritization state for a period after streams
-       //   become closed. The longer state is retained, the lower the chance that
-       //   streams are assigned incorrect or default priority values."
-       MaxClosedNodesInTree int
-
-       // MaxIdleNodesInTree controls the maximum number of idle streams to
-       // retain in the priority tree. Setting this to zero saves a small amount
-       // of memory at the cost of performance.
-       //
-       // See RFC 7540, Section 5.3.4:
-       //   Similarly, streams that are in the "idle" state can be assigned
-       //   priority or become a parent of other streams. This allows for the
-       //   creation of a grouping node in the dependency tree, which enables
-       //   more flexible expressions of priority. Idle streams begin with a
-       //   default priority (Section 5.3.5).
-       MaxIdleNodesInTree int
-
-       // ThrottleOutOfOrderWrites enables write throttling to help ensure that
-       // data is delivered in priority order. This works around a race where
-       // stream B depends on stream A and both streams are about to call Write
-       // to queue DATA frames. If B wins the race, a naive scheduler would eagerly
-       // write as much data from B as possible, but this is suboptimal because A
-       // is a higher-priority stream. With throttling enabled, we write a small
-       // amount of data from B to minimize the amount of bandwidth that B can
-       // steal from A.
-       ThrottleOutOfOrderWrites bool
-}
-
-// NewPriorityWriteScheduler constructs a WriteScheduler that schedules
-// frames by following HTTP/2 priorities as described in RFC 7540 Section 5.3.
-// If cfg is nil, default options are used.
-func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler {
-       if cfg == nil {
-               // For justification of these defaults, see:
-               // https://docs.google.com/document/d/1oLhNg1skaWD4_DtaoCxdSRN5erEXrH-KnLrMwEpOtFY
-               cfg = &PriorityWriteSchedulerConfig{
-                       MaxClosedNodesInTree:     10,
-                       MaxIdleNodesInTree:       10,
-                       ThrottleOutOfOrderWrites: false,
-               }
-       }
-
-       ws := &priorityWriteScheduler{
-               nodes:                make(map[uint32]*priorityNode),
-               maxClosedNodesInTree: cfg.MaxClosedNodesInTree,
-               maxIdleNodesInTree:   cfg.MaxIdleNodesInTree,
-               enableWriteThrottle:  cfg.ThrottleOutOfOrderWrites,
-       }
-       ws.nodes[0] = &ws.root
-       if cfg.ThrottleOutOfOrderWrites {
-               ws.writeThrottleLimit = 1024
-       } else {
-               ws.writeThrottleLimit = math.MaxInt32
-       }
-       return ws
-}
-
-type priorityNodeState int
-
-const (
-       priorityNodeOpen priorityNodeState = iota
-       priorityNodeClosed
-       priorityNodeIdle
-)
-
-// priorityNode is a node in an HTTP/2 priority tree.
-// Each node is associated with a single stream ID.
-// See RFC 7540, Section 5.3.
-type priorityNode struct {
-       q            writeQueue        // queue of pending frames to write
-       id           uint32            // id of the stream, or 0 for the root of the tree
-       weight       uint8             // the actual weight is weight+1, so the value is in [1,256]
-       state        priorityNodeState // open | closed | idle
-       bytes        int64             // number of bytes written by this node, or 0 if closed
-       subtreeBytes int64             // sum(node.bytes) of all nodes in this subtree
-
-       // These links form the priority tree.
-       parent     *priorityNode
-       kids       *priorityNode // start of the kids list
-       prev, next *priorityNode // doubly-linked list of siblings
-}
-
-func (n *priorityNode) setParent(parent *priorityNode) {
-       if n == parent {
-               panic("setParent to self")
-       }
-       if n.parent == parent {
-               return
-       }
-       // Unlink from current parent.
-       if parent := n.parent; parent != nil {
-               if n.prev == nil {
-                       parent.kids = n.next
-               } else {
-                       n.prev.next = n.next
-               }
-               if n.next != nil {
-                       n.next.prev = n.prev
-               }
-       }
-       // Link to new parent.
-       // If parent=nil, remove n from the tree.
-       // Always insert at the head of parent.kids (this is assumed by walkReadyInOrder).
-       n.parent = parent
-       if parent == nil {
-               n.next = nil
-               n.prev = nil
-       } else {
-               n.next = parent.kids
-               n.prev = nil
-               if n.next != nil {
-                       n.next.prev = n
-               }
-               parent.kids = n
-       }
-}
-
-func (n *priorityNode) addBytes(b int64) {
-       n.bytes += b
-       for ; n != nil; n = n.parent {
-               n.subtreeBytes += b
-       }
-}
-
-// walkReadyInOrder iterates over the tree in priority order, calling f for each node
-// with a non-empty write queue. When f returns true, this function returns true and the
-// walk halts. tmp is used as scratch space for sorting.
-//
-// f(n, openParent) takes two arguments: the node to visit, n, and a bool that is true
-// if any ancestor p of n is still open (ignoring the root node).
-func (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f func(*priorityNode, bool) bool) bool {
-       if !n.q.empty() && f(n, openParent) {
-               return true
-       }
-       if n.kids == nil {
-               return false
-       }
-
-       // Don't consider the root "open" when updating openParent since
-       // we can't send data frames on the root stream (only control frames).
-       if n.id != 0 {
-               openParent = openParent || (n.state == priorityNodeOpen)
-       }
-
-       // Common case: only one kid or all kids have the same weight.
-       // Some clients don't use weights; other clients (like web browsers)
-       // use mostly-linear priority trees.
-       w := n.kids.weight
-       needSort := false
-       for k := n.kids.next; k != nil; k = k.next {
-               if k.weight != w {
-                       needSort = true
-                       break
-               }
-       }
-       if !needSort {
-               for k := n.kids; k != nil; k = k.next {
-                       if k.walkReadyInOrder(openParent, tmp, f) {
-                               return true
-                       }
-               }
-               return false
-       }
-
-       // Uncommon case: sort the child nodes. We remove the kids from the parent,
-       // then re-insert after sorting so we can reuse tmp for future sort calls.
-       *tmp = (*tmp)[:0]
-       for n.kids != nil {
-               *tmp = append(*tmp, n.kids)
-               n.kids.setParent(nil)
-       }
-       sort.Sort(sortPriorityNodeSiblings(*tmp))
-       for i := len(*tmp) - 1; i >= 0; i-- {
-               (*tmp)[i].setParent(n) // setParent inserts at the head of n.kids
-       }
-       for k := n.kids; k != nil; k = k.next {
-               if k.walkReadyInOrder(openParent, tmp, f) {
-                       return true
-               }
-       }
-       return false
-}
-
-type sortPriorityNodeSiblings []*priorityNode
-
-func (z sortPriorityNodeSiblings) Len() int      { return len(z) }
-func (z sortPriorityNodeSiblings) Swap(i, k int) { z[i], z[k] = z[k], z[i] }
-func (z sortPriorityNodeSiblings) Less(i, k int) bool {
-       // Prefer the subtree that has sent fewer bytes relative to its weight.
-       // See sections 5.3.2 and 5.3.4.
-       wi, bi := float64(z[i].weight+1), float64(z[i].subtreeBytes)
-       wk, bk := float64(z[k].weight+1), float64(z[k].subtreeBytes)
-       if bi == 0 && bk == 0 {
-               return wi >= wk
-       }
-       if bk == 0 {
-               return false
-       }
-       return bi/bk <= wi/wk
-}
-
-type priorityWriteScheduler struct {
-       // root is the root of the priority tree, where root.id = 0.
-       // The root queues control frames that are not associated with any stream.
-       root priorityNode
-
-       // nodes maps stream ids to priority tree nodes.
-       nodes map[uint32]*priorityNode
-
-       // maxID is the maximum stream id in nodes.
-       maxID uint32
-
-       // lists of nodes that have been closed or are idle, but are kept in
-       // the tree for improved prioritization. When the lengths exceed either
-       // maxClosedNodesInTree or maxIdleNodesInTree, old nodes are discarded.
-       closedNodes, idleNodes []*priorityNode
-
-       // From the config.
-       maxClosedNodesInTree int
-       maxIdleNodesInTree   int
-       writeThrottleLimit   int32
-       enableWriteThrottle  bool
-
-       // tmp is scratch space for priorityNode.walkReadyInOrder to reduce allocations.
-       tmp []*priorityNode
-
-       // pool of empty queues for reuse.
-       queuePool writeQueuePool
-}
-
-func (ws *priorityWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) {
-       // The stream may be currently idle but cannot be opened or closed.
-       if curr := ws.nodes[streamID]; curr != nil {
-               if curr.state != priorityNodeIdle {
-                       panic(fmt.Sprintf("stream %d already opened", streamID))
-               }
-               curr.state = priorityNodeOpen
-               return
-       }
-
-       // RFC 7540, Section 5.3.5:
-       //  "All streams are initially assigned a non-exclusive dependency on stream 0x0.
-       //  Pushed streams initially depend on their associated stream. In both cases,
-       //  streams are assigned a default weight of 16."
-       parent := ws.nodes[options.PusherID]
-       if parent == nil {
-               parent = &ws.root
-       }
-       n := &priorityNode{
-               q:      *ws.queuePool.get(),
-               id:     streamID,
-               weight: priorityDefaultWeight,
-               state:  priorityNodeOpen,
-       }
-       n.setParent(parent)
-       ws.nodes[streamID] = n
-       if streamID > ws.maxID {
-               ws.maxID = streamID
-       }
-}
-
-func (ws *priorityWriteScheduler) CloseStream(streamID uint32) {
-       if streamID == 0 {
-               panic("violation of WriteScheduler interface: cannot close stream 0")
-       }
-       if ws.nodes[streamID] == nil {
-               panic(fmt.Sprintf("violation of WriteScheduler interface: unknown stream %d", streamID))
-       }
-       if ws.nodes[streamID].state != priorityNodeOpen {
-               panic(fmt.Sprintf("violation of WriteScheduler interface: stream %d already closed", streamID))
-       }
-
-       n := ws.nodes[streamID]
-       n.state = priorityNodeClosed
-       n.addBytes(-n.bytes)
-
-       q := n.q
-       ws.queuePool.put(&q)
-       n.q.s = nil
-       if ws.maxClosedNodesInTree > 0 {
-               ws.addClosedOrIdleNode(&ws.closedNodes, ws.maxClosedNodesInTree, n)
-       } else {
-               ws.removeNode(n)
-       }
-}
-
-func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {
-       if streamID == 0 {
-               panic("adjustPriority on root")
-       }
-
-       // If streamID does not exist, there are two cases:
-       // - A closed stream that has been removed (this will have ID <= maxID)
-       // - An idle stream that is being used for "grouping" (this will have ID > maxID)
-       n := ws.nodes[streamID]
-       if n == nil {
-               if streamID <= ws.maxID || ws.maxIdleNodesInTree == 0 {
-                       return
-               }
-               ws.maxID = streamID
-               n = &priorityNode{
-                       q:      *ws.queuePool.get(),
-                       id:     streamID,
-                       weight: priorityDefaultWeight,
-                       state:  priorityNodeIdle,
-               }
-               n.setParent(&ws.root)
-               ws.nodes[streamID] = n
-               ws.addClosedOrIdleNode(&ws.idleNodes, ws.maxIdleNodesInTree, n)
-       }
-
-       // Section 5.3.1: A dependency on a stream that is not currently in the tree
-       // results in that stream being given a default priority (Section 5.3.5).
-       parent := ws.nodes[priority.StreamDep]
-       if parent == nil {
-               n.setParent(&ws.root)
-               n.weight = priorityDefaultWeight
-               return
-       }
-
-       // Ignore if the client tries to make a node its own parent.
-       if n == parent {
-               return
-       }
-
-       // Section 5.3.3:
-       //   "If a stream is made dependent on one of its own dependencies, the
-       //   formerly dependent stream is first moved to be dependent on the
-       //   reprioritized stream's previous parent. The moved dependency retains
-       //   its weight."
-       //
-       // That is: if parent depends on n, move parent to depend on n.parent.
-       for x := parent.parent; x != nil; x = x.parent {
-               if x == n {
-                       parent.setParent(n.parent)
-                       break
-               }
-       }
-
-       // Section 5.3.3: The exclusive flag causes the stream to become the sole
-       // dependency of its parent stream, causing other dependencies to become
-       // dependent on the exclusive stream.
-       if priority.Exclusive {
-               k := parent.kids
-               for k != nil {
-                       next := k.next
-                       if k != n {
-                               k.setParent(n)
-                       }
-                       k = next
-               }
-       }
-
-       n.setParent(parent)
-       n.weight = priority.Weight
-}
-
-func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) {
-       var n *priorityNode
-       if wr.isControl() {
-               n = &ws.root
-       } else {
-               id := wr.StreamID()
-               n = ws.nodes[id]
-               if n == nil {
-                       // id is an idle or closed stream. wr should not be a HEADERS or
-                       // DATA frame. In other case, we push wr onto the root, rather
-                       // than creating a new priorityNode.
-                       if wr.DataSize() > 0 {
-                               panic("add DATA on non-open stream")
-                       }
-                       n = &ws.root
-               }
-       }
-       n.q.push(wr)
-}
-
-func (ws *priorityWriteScheduler) Pop() (wr FrameWriteRequest, ok bool) {
-       ws.root.walkReadyInOrder(false, &ws.tmp, func(n *priorityNode, openParent bool) bool {
-               limit := int32(math.MaxInt32)
-               if openParent {
-                       limit = ws.writeThrottleLimit
-               }
-               wr, ok = n.q.consume(limit)
-               if !ok {
-                       return false
-               }
-               n.addBytes(int64(wr.DataSize()))
-               // If B depends on A and B continuously has data available but A
-               // does not, gradually increase the throttling limit to allow B to
-               // steal more and more bandwidth from A.
-               if openParent {
-                       ws.writeThrottleLimit += 1024
-                       if ws.writeThrottleLimit < 0 {
-                               ws.writeThrottleLimit = math.MaxInt32
-                       }
-               } else if ws.enableWriteThrottle {
-                       ws.writeThrottleLimit = 1024
-               }
-               return true
-       })
-       return wr, ok
-}
-
-func (ws *priorityWriteScheduler) addClosedOrIdleNode(list *[]*priorityNode, maxSize int, n *priorityNode) {
-       if maxSize == 0 {
-               return
-       }
-       if len(*list) == maxSize {
-               // Remove the oldest node, then shift left.
-               ws.removeNode((*list)[0])
-               x := (*list)[1:]
-               copy(*list, x)
-               *list = (*list)[:len(x)]
-       }
-       *list = append(*list, n)
-}
-
-func (ws *priorityWriteScheduler) removeNode(n *priorityNode) {
-       for n.kids != nil {
-               n.kids.setParent(n.parent)
-       }
-       n.setParent(nil)
-       delete(ws.nodes, n.id)
-}
diff --git a/vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go b/vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go
new file mode 100644 (file)
index 0000000..4e33c29
--- /dev/null
@@ -0,0 +1,450 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+       "fmt"
+       "math"
+       "sort"
+)
+
+// RFC 7540, Section 5.3.5: the default weight is 16.
+const priorityDefaultWeightRFC7540 = 15 // 16 = 15 + 1
+
+// PriorityWriteSchedulerConfig configures a priorityWriteScheduler.
+type PriorityWriteSchedulerConfig struct {
+       // MaxClosedNodesInTree controls the maximum number of closed streams to
+       // retain in the priority tree. Setting this to zero saves a small amount
+       // of memory at the cost of performance.
+       //
+       // See RFC 7540, Section 5.3.4:
+       //   "It is possible for a stream to become closed while prioritization
+       //   information ... is in transit. ... This potentially creates suboptimal
+       //   prioritization, since the stream could be given a priority that is
+       //   different from what is intended. To avoid these problems, an endpoint
+       //   SHOULD retain stream prioritization state for a period after streams
+       //   become closed. The longer state is retained, the lower the chance that
+       //   streams are assigned incorrect or default priority values."
+       MaxClosedNodesInTree int
+
+       // MaxIdleNodesInTree controls the maximum number of idle streams to
+       // retain in the priority tree. Setting this to zero saves a small amount
+       // of memory at the cost of performance.
+       //
+       // See RFC 7540, Section 5.3.4:
+       //   Similarly, streams that are in the "idle" state can be assigned
+       //   priority or become a parent of other streams. This allows for the
+       //   creation of a grouping node in the dependency tree, which enables
+       //   more flexible expressions of priority. Idle streams begin with a
+       //   default priority (Section 5.3.5).
+       MaxIdleNodesInTree int
+
+       // ThrottleOutOfOrderWrites enables write throttling to help ensure that
+       // data is delivered in priority order. This works around a race where
+       // stream B depends on stream A and both streams are about to call Write
+       // to queue DATA frames. If B wins the race, a naive scheduler would eagerly
+       // write as much data from B as possible, but this is suboptimal because A
+       // is a higher-priority stream. With throttling enabled, we write a small
+       // amount of data from B to minimize the amount of bandwidth that B can
+       // steal from A.
+       ThrottleOutOfOrderWrites bool
+}
+
+// NewPriorityWriteScheduler constructs a WriteScheduler that schedules
+// frames by following HTTP/2 priorities as described in RFC 7540 Section 5.3.
+// If cfg is nil, default options are used.
+func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler {
+       if cfg == nil {
+               // For justification of these defaults, see:
+               // https://docs.google.com/document/d/1oLhNg1skaWD4_DtaoCxdSRN5erEXrH-KnLrMwEpOtFY
+               cfg = &PriorityWriteSchedulerConfig{
+                       MaxClosedNodesInTree:     10,
+                       MaxIdleNodesInTree:       10,
+                       ThrottleOutOfOrderWrites: false,
+               }
+       }
+
+       ws := &priorityWriteSchedulerRFC7540{
+               nodes:                make(map[uint32]*priorityNodeRFC7540),
+               maxClosedNodesInTree: cfg.MaxClosedNodesInTree,
+               maxIdleNodesInTree:   cfg.MaxIdleNodesInTree,
+               enableWriteThrottle:  cfg.ThrottleOutOfOrderWrites,
+       }
+       ws.nodes[0] = &ws.root
+       if cfg.ThrottleOutOfOrderWrites {
+               ws.writeThrottleLimit = 1024
+       } else {
+               ws.writeThrottleLimit = math.MaxInt32
+       }
+       return ws
+}
+
+type priorityNodeStateRFC7540 int
+
+const (
+       priorityNodeOpenRFC7540 priorityNodeStateRFC7540 = iota
+       priorityNodeClosedRFC7540
+       priorityNodeIdleRFC7540
+)
+
+// priorityNodeRFC7540 is a node in an HTTP/2 priority tree.
+// Each node is associated with a single stream ID.
+// See RFC 7540, Section 5.3.
+type priorityNodeRFC7540 struct {
+       q            writeQueue               // queue of pending frames to write
+       id           uint32                   // id of the stream, or 0 for the root of the tree
+       weight       uint8                    // the actual weight is weight+1, so the value is in [1,256]
+       state        priorityNodeStateRFC7540 // open | closed | idle
+       bytes        int64                    // number of bytes written by this node, or 0 if closed
+       subtreeBytes int64                    // sum(node.bytes) of all nodes in this subtree
+
+       // These links form the priority tree.
+       parent     *priorityNodeRFC7540
+       kids       *priorityNodeRFC7540 // start of the kids list
+       prev, next *priorityNodeRFC7540 // doubly-linked list of siblings
+}
+
+func (n *priorityNodeRFC7540) setParent(parent *priorityNodeRFC7540) {
+       if n == parent {
+               panic("setParent to self")
+       }
+       if n.parent == parent {
+               return
+       }
+       // Unlink from current parent.
+       if parent := n.parent; parent != nil {
+               if n.prev == nil {
+                       parent.kids = n.next
+               } else {
+                       n.prev.next = n.next
+               }
+               if n.next != nil {
+                       n.next.prev = n.prev
+               }
+       }
+       // Link to new parent.
+       // If parent=nil, remove n from the tree.
+       // Always insert at the head of parent.kids (this is assumed by walkReadyInOrder).
+       n.parent = parent
+       if parent == nil {
+               n.next = nil
+               n.prev = nil
+       } else {
+               n.next = parent.kids
+               n.prev = nil
+               if n.next != nil {
+                       n.next.prev = n
+               }
+               parent.kids = n
+       }
+}
+
+func (n *priorityNodeRFC7540) addBytes(b int64) {
+       n.bytes += b
+       for ; n != nil; n = n.parent {
+               n.subtreeBytes += b
+       }
+}
+
+// walkReadyInOrder iterates over the tree in priority order, calling f for each node
+// with a non-empty write queue. When f returns true, this function returns true and the
+// walk halts. tmp is used as scratch space for sorting.
+//
+// f(n, openParent) takes two arguments: the node to visit, n, and a bool that is true
+// if any ancestor p of n is still open (ignoring the root node).
+func (n *priorityNodeRFC7540) walkReadyInOrder(openParent bool, tmp *[]*priorityNodeRFC7540, f func(*priorityNodeRFC7540, bool) bool) bool {
+       if !n.q.empty() && f(n, openParent) {
+               return true
+       }
+       if n.kids == nil {
+               return false
+       }
+
+       // Don't consider the root "open" when updating openParent since
+       // we can't send data frames on the root stream (only control frames).
+       if n.id != 0 {
+               openParent = openParent || (n.state == priorityNodeOpenRFC7540)
+       }
+
+       // Common case: only one kid or all kids have the same weight.
+       // Some clients don't use weights; other clients (like web browsers)
+       // use mostly-linear priority trees.
+       w := n.kids.weight
+       needSort := false
+       for k := n.kids.next; k != nil; k = k.next {
+               if k.weight != w {
+                       needSort = true
+                       break
+               }
+       }
+       if !needSort {
+               for k := n.kids; k != nil; k = k.next {
+                       if k.walkReadyInOrder(openParent, tmp, f) {
+                               return true
+                       }
+               }
+               return false
+       }
+
+       // Uncommon case: sort the child nodes. We remove the kids from the parent,
+       // then re-insert after sorting so we can reuse tmp for future sort calls.
+       *tmp = (*tmp)[:0]
+       for n.kids != nil {
+               *tmp = append(*tmp, n.kids)
+               n.kids.setParent(nil)
+       }
+       sort.Sort(sortPriorityNodeSiblingsRFC7540(*tmp))
+       for i := len(*tmp) - 1; i >= 0; i-- {
+               (*tmp)[i].setParent(n) // setParent inserts at the head of n.kids
+       }
+       for k := n.kids; k != nil; k = k.next {
+               if k.walkReadyInOrder(openParent, tmp, f) {
+                       return true
+               }
+       }
+       return false
+}
+
+type sortPriorityNodeSiblingsRFC7540 []*priorityNodeRFC7540
+
+func (z sortPriorityNodeSiblingsRFC7540) Len() int      { return len(z) }
+func (z sortPriorityNodeSiblingsRFC7540) Swap(i, k int) { z[i], z[k] = z[k], z[i] }
+func (z sortPriorityNodeSiblingsRFC7540) Less(i, k int) bool {
+       // Prefer the subtree that has sent fewer bytes relative to its weight.
+       // See sections 5.3.2 and 5.3.4.
+       wi, bi := float64(z[i].weight)+1, float64(z[i].subtreeBytes)
+       wk, bk := float64(z[k].weight)+1, float64(z[k].subtreeBytes)
+       if bi == 0 && bk == 0 {
+               return wi >= wk
+       }
+       if bk == 0 {
+               return false
+       }
+       return bi/bk <= wi/wk
+}
+
+type priorityWriteSchedulerRFC7540 struct {
+       // root is the root of the priority tree, where root.id = 0.
+       // The root queues control frames that are not associated with any stream.
+       root priorityNodeRFC7540
+
+       // nodes maps stream ids to priority tree nodes.
+       nodes map[uint32]*priorityNodeRFC7540
+
+       // maxID is the maximum stream id in nodes.
+       maxID uint32
+
+       // lists of nodes that have been closed or are idle, but are kept in
+       // the tree for improved prioritization. When the lengths exceed either
+       // maxClosedNodesInTree or maxIdleNodesInTree, old nodes are discarded.
+       closedNodes, idleNodes []*priorityNodeRFC7540
+
+       // From the config.
+       maxClosedNodesInTree int
+       maxIdleNodesInTree   int
+       writeThrottleLimit   int32
+       enableWriteThrottle  bool
+
+       // tmp is scratch space for priorityNode.walkReadyInOrder to reduce allocations.
+       tmp []*priorityNodeRFC7540
+
+       // pool of empty queues for reuse.
+       queuePool writeQueuePool
+}
+
+func (ws *priorityWriteSchedulerRFC7540) OpenStream(streamID uint32, options OpenStreamOptions) {
+       // The stream may be currently idle but cannot be opened or closed.
+       if curr := ws.nodes[streamID]; curr != nil {
+               if curr.state != priorityNodeIdleRFC7540 {
+                       panic(fmt.Sprintf("stream %d already opened", streamID))
+               }
+               curr.state = priorityNodeOpenRFC7540
+               return
+       }
+
+       // RFC 7540, Section 5.3.5:
+       //  "All streams are initially assigned a non-exclusive dependency on stream 0x0.
+       //  Pushed streams initially depend on their associated stream. In both cases,
+       //  streams are assigned a default weight of 16."
+       parent := ws.nodes[options.PusherID]
+       if parent == nil {
+               parent = &ws.root
+       }
+       n := &priorityNodeRFC7540{
+               q:      *ws.queuePool.get(),
+               id:     streamID,
+               weight: priorityDefaultWeightRFC7540,
+               state:  priorityNodeOpenRFC7540,
+       }
+       n.setParent(parent)
+       ws.nodes[streamID] = n
+       if streamID > ws.maxID {
+               ws.maxID = streamID
+       }
+}
+
+func (ws *priorityWriteSchedulerRFC7540) CloseStream(streamID uint32) {
+       if streamID == 0 {
+               panic("violation of WriteScheduler interface: cannot close stream 0")
+       }
+       if ws.nodes[streamID] == nil {
+               panic(fmt.Sprintf("violation of WriteScheduler interface: unknown stream %d", streamID))
+       }
+       if ws.nodes[streamID].state != priorityNodeOpenRFC7540 {
+               panic(fmt.Sprintf("violation of WriteScheduler interface: stream %d already closed", streamID))
+       }
+
+       n := ws.nodes[streamID]
+       n.state = priorityNodeClosedRFC7540
+       n.addBytes(-n.bytes)
+
+       q := n.q
+       ws.queuePool.put(&q)
+       if ws.maxClosedNodesInTree > 0 {
+               ws.addClosedOrIdleNode(&ws.closedNodes, ws.maxClosedNodesInTree, n)
+       } else {
+               ws.removeNode(n)
+       }
+}
+
+func (ws *priorityWriteSchedulerRFC7540) AdjustStream(streamID uint32, priority PriorityParam) {
+       if streamID == 0 {
+               panic("adjustPriority on root")
+       }
+
+       // If streamID does not exist, there are two cases:
+       // - A closed stream that has been removed (this will have ID <= maxID)
+       // - An idle stream that is being used for "grouping" (this will have ID > maxID)
+       n := ws.nodes[streamID]
+       if n == nil {
+               if streamID <= ws.maxID || ws.maxIdleNodesInTree == 0 {
+                       return
+               }
+               ws.maxID = streamID
+               n = &priorityNodeRFC7540{
+                       q:      *ws.queuePool.get(),
+                       id:     streamID,
+                       weight: priorityDefaultWeightRFC7540,
+                       state:  priorityNodeIdleRFC7540,
+               }
+               n.setParent(&ws.root)
+               ws.nodes[streamID] = n
+               ws.addClosedOrIdleNode(&ws.idleNodes, ws.maxIdleNodesInTree, n)
+       }
+
+       // Section 5.3.1: A dependency on a stream that is not currently in the tree
+       // results in that stream being given a default priority (Section 5.3.5).
+       parent := ws.nodes[priority.StreamDep]
+       if parent == nil {
+               n.setParent(&ws.root)
+               n.weight = priorityDefaultWeightRFC7540
+               return
+       }
+
+       // Ignore if the client tries to make a node its own parent.
+       if n == parent {
+               return
+       }
+
+       // Section 5.3.3:
+       //   "If a stream is made dependent on one of its own dependencies, the
+       //   formerly dependent stream is first moved to be dependent on the
+       //   reprioritized stream's previous parent. The moved dependency retains
+       //   its weight."
+       //
+       // That is: if parent depends on n, move parent to depend on n.parent.
+       for x := parent.parent; x != nil; x = x.parent {
+               if x == n {
+                       parent.setParent(n.parent)
+                       break
+               }
+       }
+
+       // Section 5.3.3: The exclusive flag causes the stream to become the sole
+       // dependency of its parent stream, causing other dependencies to become
+       // dependent on the exclusive stream.
+       if priority.Exclusive {
+               k := parent.kids
+               for k != nil {
+                       next := k.next
+                       if k != n {
+                               k.setParent(n)
+                       }
+                       k = next
+               }
+       }
+
+       n.setParent(parent)
+       n.weight = priority.Weight
+}
+
+func (ws *priorityWriteSchedulerRFC7540) Push(wr FrameWriteRequest) {
+       var n *priorityNodeRFC7540
+       if wr.isControl() {
+               n = &ws.root
+       } else {
+               id := wr.StreamID()
+               n = ws.nodes[id]
+               if n == nil {
+                       // id is an idle or closed stream. wr should not be a HEADERS or
+                       // DATA frame. In other case, we push wr onto the root, rather
+                       // than creating a new priorityNode.
+                       if wr.DataSize() > 0 {
+                               panic("add DATA on non-open stream")
+                       }
+                       n = &ws.root
+               }
+       }
+       n.q.push(wr)
+}
+
+func (ws *priorityWriteSchedulerRFC7540) Pop() (wr FrameWriteRequest, ok bool) {
+       ws.root.walkReadyInOrder(false, &ws.tmp, func(n *priorityNodeRFC7540, openParent bool) bool {
+               limit := int32(math.MaxInt32)
+               if openParent {
+                       limit = ws.writeThrottleLimit
+               }
+               wr, ok = n.q.consume(limit)
+               if !ok {
+                       return false
+               }
+               n.addBytes(int64(wr.DataSize()))
+               // If B depends on A and B continuously has data available but A
+               // does not, gradually increase the throttling limit to allow B to
+               // steal more and more bandwidth from A.
+               if openParent {
+                       ws.writeThrottleLimit += 1024
+                       if ws.writeThrottleLimit < 0 {
+                               ws.writeThrottleLimit = math.MaxInt32
+                       }
+               } else if ws.enableWriteThrottle {
+                       ws.writeThrottleLimit = 1024
+               }
+               return true
+       })
+       return wr, ok
+}
+
+func (ws *priorityWriteSchedulerRFC7540) addClosedOrIdleNode(list *[]*priorityNodeRFC7540, maxSize int, n *priorityNodeRFC7540) {
+       if maxSize == 0 {
+               return
+       }
+       if len(*list) == maxSize {
+               // Remove the oldest node, then shift left.
+               ws.removeNode((*list)[0])
+               x := (*list)[1:]
+               copy(*list, x)
+               *list = (*list)[:len(x)]
+       }
+       *list = append(*list, n)
+}
+
+func (ws *priorityWriteSchedulerRFC7540) removeNode(n *priorityNodeRFC7540) {
+       for n.kids != nil {
+               n.kids.setParent(n.parent)
+       }
+       n.setParent(nil)
+       delete(ws.nodes, n.id)
+}
diff --git a/vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go b/vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go
new file mode 100644 (file)
index 0000000..cb4cadc
--- /dev/null
@@ -0,0 +1,209 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package http2
+
+import (
+       "fmt"
+       "math"
+)
+
+type streamMetadata struct {
+       location *writeQueue
+       priority PriorityParam
+}
+
+type priorityWriteSchedulerRFC9218 struct {
+       // control contains control frames (SETTINGS, PING, etc.).
+       control writeQueue
+
+       // heads contain the head of a circular list of streams.
+       // We put these heads within a nested array that represents urgency and
+       // incremental, as defined in
+       // https://www.rfc-editor.org/rfc/rfc9218.html#name-priority-parameters.
+       // 8 represents u=0 up to u=7, and 2 represents i=false and i=true.
+       heads [8][2]*writeQueue
+
+       // streams contains a mapping between each stream ID and their metadata, so
+       // we can quickly locate them when needing to, for example, adjust their
+       // priority.
+       streams map[uint32]streamMetadata
+
+       // queuePool are empty queues for reuse.
+       queuePool writeQueuePool
+
+       // prioritizeIncremental is used to determine whether we should prioritize
+       // incremental streams or not, when urgency is the same in a given Pop()
+       // call.
+       prioritizeIncremental bool
+}
+
+func newPriorityWriteSchedulerRFC9218() WriteScheduler {
+       ws := &priorityWriteSchedulerRFC9218{
+               streams: make(map[uint32]streamMetadata),
+       }
+       return ws
+}
+
+func (ws *priorityWriteSchedulerRFC9218) OpenStream(streamID uint32, opt OpenStreamOptions) {
+       if ws.streams[streamID].location != nil {
+               panic(fmt.Errorf("stream %d already opened", streamID))
+       }
+       q := ws.queuePool.get()
+       ws.streams[streamID] = streamMetadata{
+               location: q,
+               priority: opt.priority,
+       }
+
+       u, i := opt.priority.urgency, opt.priority.incremental
+       if ws.heads[u][i] == nil {
+               ws.heads[u][i] = q
+               q.next = q
+               q.prev = q
+       } else {
+               // Queues are stored in a ring.
+               // Insert the new stream before ws.head, putting it at the end of the list.
+               q.prev = ws.heads[u][i].prev
+               q.next = ws.heads[u][i]
+               q.prev.next = q
+               q.next.prev = q
+       }
+}
+
+func (ws *priorityWriteSchedulerRFC9218) CloseStream(streamID uint32) {
+       metadata := ws.streams[streamID]
+       q, u, i := metadata.location, metadata.priority.urgency, metadata.priority.incremental
+       if q == nil {
+               return
+       }
+       if q.next == q {
+               // This was the only open stream.
+               ws.heads[u][i] = nil
+       } else {
+               q.prev.next = q.next
+               q.next.prev = q.prev
+               if ws.heads[u][i] == q {
+                       ws.heads[u][i] = q.next
+               }
+       }
+       delete(ws.streams, streamID)
+       ws.queuePool.put(q)
+}
+
+func (ws *priorityWriteSchedulerRFC9218) AdjustStream(streamID uint32, priority PriorityParam) {
+       metadata := ws.streams[streamID]
+       q, u, i := metadata.location, metadata.priority.urgency, metadata.priority.incremental
+       if q == nil {
+               return
+       }
+
+       // Remove stream from current location.
+       if q.next == q {
+               // This was the only open stream.
+               ws.heads[u][i] = nil
+       } else {
+               q.prev.next = q.next
+               q.next.prev = q.prev
+               if ws.heads[u][i] == q {
+                       ws.heads[u][i] = q.next
+               }
+       }
+
+       // Insert stream to the new queue.
+       u, i = priority.urgency, priority.incremental
+       if ws.heads[u][i] == nil {
+               ws.heads[u][i] = q
+               q.next = q
+               q.prev = q
+       } else {
+               // Queues are stored in a ring.
+               // Insert the new stream before ws.head, putting it at the end of the list.
+               q.prev = ws.heads[u][i].prev
+               q.next = ws.heads[u][i]
+               q.prev.next = q
+               q.next.prev = q
+       }
+
+       // Update the metadata.
+       ws.streams[streamID] = streamMetadata{
+               location: q,
+               priority: priority,
+       }
+}
+
+func (ws *priorityWriteSchedulerRFC9218) Push(wr FrameWriteRequest) {
+       if wr.isControl() {
+               ws.control.push(wr)
+               return
+       }
+       q := ws.streams[wr.StreamID()].location
+       if q == nil {
+               // This is a closed stream.
+               // wr should not be a HEADERS or DATA frame.
+               // We push the request onto the control queue.
+               if wr.DataSize() > 0 {
+                       panic("add DATA on non-open stream")
+               }
+               ws.control.push(wr)
+               return
+       }
+       q.push(wr)
+}
+
+func (ws *priorityWriteSchedulerRFC9218) Pop() (FrameWriteRequest, bool) {
+       // Control and RST_STREAM frames first.
+       if !ws.control.empty() {
+               return ws.control.shift(), true
+       }
+
+       // On the next Pop(), we want to prioritize incremental if we prioritized
+       // non-incremental request of the same urgency this time. Vice-versa.
+       // i.e. when there are incremental and non-incremental requests at the same
+       // priority, we give 50% of our bandwidth to the incremental ones in
+       // aggregate and 50% to the first non-incremental one (since
+       // non-incremental streams do not use round-robin writes).
+       ws.prioritizeIncremental = !ws.prioritizeIncremental
+
+       // Always prioritize lowest u (i.e. highest urgency level).
+       for u := range ws.heads {
+               for i := range ws.heads[u] {
+                       // When we want to prioritize incremental, we try to pop i=true
+                       // first before i=false when u is the same.
+                       if ws.prioritizeIncremental {
+                               i = (i + 1) % 2
+                       }
+                       q := ws.heads[u][i]
+                       if q == nil {
+                               continue
+                       }
+                       for {
+                               if wr, ok := q.consume(math.MaxInt32); ok {
+                                       if i == 1 {
+                                               // For incremental streams, we update head to q.next so
+                                               // we can round-robin between multiple streams that can
+                                               // immediately benefit from partial writes.
+                                               ws.heads[u][i] = q.next
+                                       } else {
+                                               // For non-incremental streams, we try to finish one to
+                                               // completion rather than doing round-robin. However,
+                                               // we update head here so that if q.consume() is !ok
+                                               // (e.g. the stream has no more frame to consume), head
+                                               // is updated to the next q that has frames to consume
+                                               // on future iterations. This way, we do not prioritize
+                                               // writing to unavailable stream on next Pop() calls,
+                                               // preventing head-of-line blocking.
+                                               ws.heads[u][i] = q
+                                       }
+                                       return wr, true
+                               }
+                               q = q.next
+                               if q == ws.heads[u][i] {
+                                       break
+                               }
+                       }
+
+               }
+       }
+       return FrameWriteRequest{}, false
+}
index 54fe86322d2fe8c778eaaec9e5b2eb932a402b7a..737cff9ecbd8891632b777a73b4d91316d6b2dbf 100644 (file)
@@ -25,7 +25,7 @@ type roundRobinWriteScheduler struct {
 }
 
 // newRoundRobinWriteScheduler constructs a new write scheduler.
-// The round robin scheduler priorizes control frames
+// The round robin scheduler prioritizes control frames
 // like SETTINGS and PING over DATA frames.
 // When there are no control frames to send, it performs a round-robin
 // selection from the ready streams.
index 4b705531793c2fcb7c58a5846081022737bf67f1..1e10f89ebf71e57226523e00630184912f72446f 100644 (file)
@@ -51,7 +51,7 @@ type EncodeHeadersParam struct {
        DefaultUserAgent string
 }
 
-// EncodeHeadersParam is the result of EncodeHeaders.
+// EncodeHeadersResult is the result of EncodeHeaders.
 type EncodeHeadersResult struct {
        HasBody     bool
        HasTrailers bool
@@ -399,7 +399,7 @@ type ServerRequestResult struct {
 
        // If the request should be rejected, this is a short string suitable for passing
        // to the http2 package's CountError function.
-       // It might be a bit odd to return errors this way rather than returing an error,
+       // It might be a bit odd to return errors this way rather than returning an error,
        // but this ensures we don't forget to include a CountError reason.
        InvalidReason string
 }
index 84fcc32b634b87124fe0f00afd596582dd740e30..8eedb84cecc598f6892e80cde74bfb8f6002c31d 100644 (file)
@@ -297,7 +297,7 @@ func (up *UsernamePassword) Authenticate(ctx context.Context, rw io.ReadWriter,
                b = append(b, up.Username...)
                b = append(b, byte(len(up.Password)))
                b = append(b, up.Password...)
-               // TODO(mikio): handle IO deadlines and cancelation if
+               // TODO(mikio): handle IO deadlines and cancellation if
                // necessary
                if _, err := rw.Write(b); err != nil {
                        return err
index 1d8cffae8cfc872e5c3748e4394da5ec1a763ccf..2f45dbc86e5381cafc2a7b6226d68d3e1a79dc6c 100644 (file)
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // Package errgroup provides synchronization, error propagation, and Context
-// cancelation for groups of goroutines working on subtasks of a common task.
+// cancellation for groups of goroutines working on subtasks of a common task.
 //
 // [errgroup.Group] is related to [sync.WaitGroup] but adds handling of tasks
 // returning errors.
index 63541994ef03090c2e977455f80cf78067f37125..34c9ae76efd48eaf49ea95a15763a2fd3af48c62 100644 (file)
@@ -92,6 +92,9 @@ var ARM64 struct {
        HasSHA2     bool // SHA2 hardware implementation
        HasCRC32    bool // CRC32 hardware implementation
        HasATOMICS  bool // Atomic memory operation instruction set
+       HasHPDS     bool // Hierarchical permission disables in translations tables
+       HasLOR      bool // Limited ordering regions
+       HasPAN      bool // Privileged access never
        HasFPHP     bool // Half precision floating-point instruction set
        HasASIMDHP  bool // Advanced SIMD half precision instruction set
        HasCPUID    bool // CPUID identification scheme registers
index af2aa99f9f06c916e57b73ae44f7d8b27d6ad33a..f449c679fe462fd91ad635a813ed75921bd53c63 100644 (file)
@@ -65,10 +65,10 @@ func setMinimalFeatures() {
 func readARM64Registers() {
        Initialized = true
 
-       parseARM64SystemRegisters(getisar0(), getisar1(), getpfr0())
+       parseARM64SystemRegisters(getisar0(), getisar1(), getmmfr1(), getpfr0())
 }
 
-func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) {
+func parseARM64SystemRegisters(isar0, isar1, mmfr1, pfr0 uint64) {
        // ID_AA64ISAR0_EL1
        switch extractBits(isar0, 4, 7) {
        case 1:
@@ -152,6 +152,22 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) {
                ARM64.HasI8MM = true
        }
 
+       // ID_AA64MMFR1_EL1
+       switch extractBits(mmfr1, 12, 15) {
+       case 1, 2:
+               ARM64.HasHPDS = true
+       }
+
+       switch extractBits(mmfr1, 16, 19) {
+       case 1:
+               ARM64.HasLOR = true
+       }
+
+       switch extractBits(mmfr1, 20, 23) {
+       case 1, 2, 3:
+               ARM64.HasPAN = true
+       }
+
        // ID_AA64PFR0_EL1
        switch extractBits(pfr0, 16, 19) {
        case 0:
index 22cc99844a75693c78f2241ac334da02644411fc..a4f24b3b0c8fd06691182d5b9ee79a11c7d3d501 100644 (file)
@@ -9,31 +9,34 @@
 // func getisar0() uint64
 TEXT ·getisar0(SB),NOSPLIT,$0-8
        // get Instruction Set Attributes 0 into x0
-       // mrs x0, ID_AA64ISAR0_EL1 = d5380600
-       WORD    $0xd5380600
+       MRS     ID_AA64ISAR0_EL1, R0
        MOVD    R0, ret+0(FP)
        RET
 
 // func getisar1() uint64
 TEXT ·getisar1(SB),NOSPLIT,$0-8
        // get Instruction Set Attributes 1 into x0
-       // mrs x0, ID_AA64ISAR1_EL1 = d5380620
-       WORD    $0xd5380620
+       MRS     ID_AA64ISAR1_EL1, R0
+       MOVD    R0, ret+0(FP)
+       RET
+
+// func getmmfr1() uint64
+TEXT ·getmmfr1(SB),NOSPLIT,$0-8
+       // get Memory Model Feature Register 1 into x0
+       MRS     ID_AA64MMFR1_EL1, R0
        MOVD    R0, ret+0(FP)
        RET
 
 // func getpfr0() uint64
 TEXT ·getpfr0(SB),NOSPLIT,$0-8
        // get Processor Feature Register 0 into x0
-       // mrs x0, ID_AA64PFR0_EL1 = d5380400
-       WORD    $0xd5380400
+       MRS     ID_AA64PFR0_EL1, R0
        MOVD    R0, ret+0(FP)
        RET
 
 // func getzfr0() uint64
 TEXT ·getzfr0(SB),NOSPLIT,$0-8
        // get SVE Feature Register 0 into x0
-       // mrs  x0, ID_AA64ZFR0_EL1 = d5380480
-       WORD $0xd5380480
+       MRS     ID_AA64ZFR0_EL1, R0
        MOVD    R0, ret+0(FP)
        RET
index 6ac6e1efb2087b950ad459226610811485fce2d1..e3fc5a8d31ca6642f2f9b9d128e06686b3a9e1dd 100644 (file)
@@ -8,5 +8,6 @@ package cpu
 
 func getisar0() uint64
 func getisar1() uint64
+func getmmfr1() uint64
 func getpfr0() uint64
 func getzfr0() uint64
index 7f1946780bd305c1d17491b40bc4062ea32d228d..8df2079e15f95093b1ab6d529197bd1f8f11d20d 100644 (file)
@@ -8,4 +8,5 @@ package cpu
 
 func getisar0() uint64 { return 0 }
 func getisar1() uint64 { return 0 }
+func getmmfr1() uint64 { return 0 }
 func getpfr0() uint64  { return 0 }
index ebfb3fc8e76d2acc9d337527e450fb3d69f8107b..19aea0633e8e9188c48c33dcb4d4a86de299a6da 100644 (file)
@@ -167,7 +167,7 @@ func doinit() {
                setMinimalFeatures()
                return
        }
-       parseARM64SystemRegisters(cpuid.aa64isar0, cpuid.aa64isar1, cpuid.aa64pfr0)
+       parseARM64SystemRegisters(cpuid.aa64isar0, cpuid.aa64isar1, cpuid.aa64mmfr1, cpuid.aa64pfr0)
 
        Initialized = true
 }
index 85b64d5ccb735e9387ee9dad8b583d4458bc6ffe..87fd3a7780767eedc725d0c7115c240763c71a83 100644 (file)
@@ -59,7 +59,7 @@ func doinit() {
        if !ok {
                return
        }
-       parseARM64SystemRegisters(isar0, isar1, 0)
+       parseARM64SystemRegisters(isar0, isar1, 0, 0)
 
        Initialized = true
 }
index d1c8b2640ebd4bfb0adb7efb435b3992f369e67e..42517077c43742e80bfdb620564c5d540cb03a9b 100644 (file)
@@ -226,6 +226,7 @@ struct ltchars {
 #include <linux/cryptouser.h>
 #include <linux/devlink.h>
 #include <linux/dm-ioctl.h>
+#include <linux/elf.h>
 #include <linux/errqueue.h>
 #include <linux/ethtool_netlink.h>
 #include <linux/falloc.h>
@@ -529,6 +530,7 @@ ccflags="$@"
                $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ ||
                $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ ||
                $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ ||
+               $2 ~ /^(DT|EI|ELF|EV|NN|NT|PF|SHF|SHN|SHT|STB|STT|VER)_/ ||
                $2 ~ /^O?XTABS$/ ||
                $2 ~ /^TC[IO](ON|OFF)$/ ||
                $2 ~ /^IN_/ ||
index 9439af961d98b62926e50d2610c8e8169ab48850..06c0eea6fb6a06e9d29ef211d9c28805c6a8700a 100644 (file)
@@ -2643,3 +2643,9 @@ func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) {
 
 //sys  Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error)
 //sys  Mseal(b []byte, flags uint) (err error)
+
+//sys  setMemPolicy(mode int, mask *CPUSet, size int) (err error) = SYS_SET_MEMPOLICY
+
+func SetMemPolicy(mode int, mask *CPUSet) error {
+       return setMemPolicy(mode, mask, _CPU_SETSIZE)
+}
index b6db27d937c8fa49caaf62a3c6171965fd16c21d..d0a75da572c96fea53479ec9e3a55456182c746c 100644 (file)
@@ -853,20 +853,86 @@ const (
        DM_VERSION_MAJOR                            = 0x4
        DM_VERSION_MINOR                            = 0x32
        DM_VERSION_PATCHLEVEL                       = 0x0
+       DT_ADDRRNGHI                                = 0x6ffffeff
+       DT_ADDRRNGLO                                = 0x6ffffe00
        DT_BLK                                      = 0x6
        DT_CHR                                      = 0x2
+       DT_DEBUG                                    = 0x15
        DT_DIR                                      = 0x4
+       DT_ENCODING                                 = 0x20
        DT_FIFO                                     = 0x1
+       DT_FINI                                     = 0xd
+       DT_FLAGS_1                                  = 0x6ffffffb
+       DT_GNU_HASH                                 = 0x6ffffef5
+       DT_HASH                                     = 0x4
+       DT_HIOS                                     = 0x6ffff000
+       DT_HIPROC                                   = 0x7fffffff
+       DT_INIT                                     = 0xc
+       DT_JMPREL                                   = 0x17
        DT_LNK                                      = 0xa
+       DT_LOOS                                     = 0x6000000d
+       DT_LOPROC                                   = 0x70000000
+       DT_NEEDED                                   = 0x1
+       DT_NULL                                     = 0x0
+       DT_PLTGOT                                   = 0x3
+       DT_PLTREL                                   = 0x14
+       DT_PLTRELSZ                                 = 0x2
        DT_REG                                      = 0x8
+       DT_REL                                      = 0x11
+       DT_RELA                                     = 0x7
+       DT_RELACOUNT                                = 0x6ffffff9
+       DT_RELAENT                                  = 0x9
+       DT_RELASZ                                   = 0x8
+       DT_RELCOUNT                                 = 0x6ffffffa
+       DT_RELENT                                   = 0x13
+       DT_RELSZ                                    = 0x12
+       DT_RPATH                                    = 0xf
        DT_SOCK                                     = 0xc
+       DT_SONAME                                   = 0xe
+       DT_STRSZ                                    = 0xa
+       DT_STRTAB                                   = 0x5
+       DT_SYMBOLIC                                 = 0x10
+       DT_SYMENT                                   = 0xb
+       DT_SYMTAB                                   = 0x6
+       DT_TEXTREL                                  = 0x16
        DT_UNKNOWN                                  = 0x0
+       DT_VALRNGHI                                 = 0x6ffffdff
+       DT_VALRNGLO                                 = 0x6ffffd00
+       DT_VERDEF                                   = 0x6ffffffc
+       DT_VERDEFNUM                                = 0x6ffffffd
+       DT_VERNEED                                  = 0x6ffffffe
+       DT_VERNEEDNUM                               = 0x6fffffff
+       DT_VERSYM                                   = 0x6ffffff0
        DT_WHT                                      = 0xe
        ECHO                                        = 0x8
        ECRYPTFS_SUPER_MAGIC                        = 0xf15f
        EFD_SEMAPHORE                               = 0x1
        EFIVARFS_MAGIC                              = 0xde5e81e4
        EFS_SUPER_MAGIC                             = 0x414a53
+       EI_CLASS                                    = 0x4
+       EI_DATA                                     = 0x5
+       EI_MAG0                                     = 0x0
+       EI_MAG1                                     = 0x1
+       EI_MAG2                                     = 0x2
+       EI_MAG3                                     = 0x3
+       EI_NIDENT                                   = 0x10
+       EI_OSABI                                    = 0x7
+       EI_PAD                                      = 0x8
+       EI_VERSION                                  = 0x6
+       ELFCLASS32                                  = 0x1
+       ELFCLASS64                                  = 0x2
+       ELFCLASSNONE                                = 0x0
+       ELFCLASSNUM                                 = 0x3
+       ELFDATA2LSB                                 = 0x1
+       ELFDATA2MSB                                 = 0x2
+       ELFDATANONE                                 = 0x0
+       ELFMAG                                      = "\177ELF"
+       ELFMAG0                                     = 0x7f
+       ELFMAG1                                     = 'E'
+       ELFMAG2                                     = 'L'
+       ELFMAG3                                     = 'F'
+       ELFOSABI_LINUX                              = 0x3
+       ELFOSABI_NONE                               = 0x0
        EM_386                                      = 0x3
        EM_486                                      = 0x6
        EM_68K                                      = 0x4
@@ -1152,14 +1218,24 @@ const (
        ETH_P_WCCP                                  = 0x883e
        ETH_P_X25                                   = 0x805
        ETH_P_XDSA                                  = 0xf8
+       ET_CORE                                     = 0x4
+       ET_DYN                                      = 0x3
+       ET_EXEC                                     = 0x2
+       ET_HIPROC                                   = 0xffff
+       ET_LOPROC                                   = 0xff00
+       ET_NONE                                     = 0x0
+       ET_REL                                      = 0x1
        EV_ABS                                      = 0x3
        EV_CNT                                      = 0x20
+       EV_CURRENT                                  = 0x1
        EV_FF                                       = 0x15
        EV_FF_STATUS                                = 0x17
        EV_KEY                                      = 0x1
        EV_LED                                      = 0x11
        EV_MAX                                      = 0x1f
        EV_MSC                                      = 0x4
+       EV_NONE                                     = 0x0
+       EV_NUM                                      = 0x2
        EV_PWR                                      = 0x16
        EV_REL                                      = 0x2
        EV_REP                                      = 0x14
@@ -2276,7 +2352,167 @@ const (
        NLM_F_REPLACE                               = 0x100
        NLM_F_REQUEST                               = 0x1
        NLM_F_ROOT                                  = 0x100
+       NN_386_IOPERM                               = "LINUX"
+       NN_386_TLS                                  = "LINUX"
+       NN_ARC_V2                                   = "LINUX"
+       NN_ARM_FPMR                                 = "LINUX"
+       NN_ARM_GCS                                  = "LINUX"
+       NN_ARM_HW_BREAK                             = "LINUX"
+       NN_ARM_HW_WATCH                             = "LINUX"
+       NN_ARM_PACA_KEYS                            = "LINUX"
+       NN_ARM_PACG_KEYS                            = "LINUX"
+       NN_ARM_PAC_ENABLED_KEYS                     = "LINUX"
+       NN_ARM_PAC_MASK                             = "LINUX"
+       NN_ARM_POE                                  = "LINUX"
+       NN_ARM_SSVE                                 = "LINUX"
+       NN_ARM_SVE                                  = "LINUX"
+       NN_ARM_SYSTEM_CALL                          = "LINUX"
+       NN_ARM_TAGGED_ADDR_CTRL                     = "LINUX"
+       NN_ARM_TLS                                  = "LINUX"
+       NN_ARM_VFP                                  = "LINUX"
+       NN_ARM_ZA                                   = "LINUX"
+       NN_ARM_ZT                                   = "LINUX"
+       NN_AUXV                                     = "CORE"
+       NN_FILE                                     = "CORE"
+       NN_GNU_PROPERTY_TYPE_0                      = "GNU"
+       NN_LOONGARCH_CPUCFG                         = "LINUX"
+       NN_LOONGARCH_CSR                            = "LINUX"
+       NN_LOONGARCH_HW_BREAK                       = "LINUX"
+       NN_LOONGARCH_HW_WATCH                       = "LINUX"
+       NN_LOONGARCH_LASX                           = "LINUX"
+       NN_LOONGARCH_LBT                            = "LINUX"
+       NN_LOONGARCH_LSX                            = "LINUX"
+       NN_MIPS_DSP                                 = "LINUX"
+       NN_MIPS_FP_MODE                             = "LINUX"
+       NN_MIPS_MSA                                 = "LINUX"
+       NN_PPC_DEXCR                                = "LINUX"
+       NN_PPC_DSCR                                 = "LINUX"
+       NN_PPC_EBB                                  = "LINUX"
+       NN_PPC_HASHKEYR                             = "LINUX"
+       NN_PPC_PKEY                                 = "LINUX"
+       NN_PPC_PMU                                  = "LINUX"
+       NN_PPC_PPR                                  = "LINUX"
+       NN_PPC_SPE                                  = "LINUX"
+       NN_PPC_TAR                                  = "LINUX"
+       NN_PPC_TM_CDSCR                             = "LINUX"
+       NN_PPC_TM_CFPR                              = "LINUX"
+       NN_PPC_TM_CGPR                              = "LINUX"
+       NN_PPC_TM_CPPR                              = "LINUX"
+       NN_PPC_TM_CTAR                              = "LINUX"
+       NN_PPC_TM_CVMX                              = "LINUX"
+       NN_PPC_TM_CVSX                              = "LINUX"
+       NN_PPC_TM_SPR                               = "LINUX"
+       NN_PPC_VMX                                  = "LINUX"
+       NN_PPC_VSX                                  = "LINUX"
+       NN_PRFPREG                                  = "CORE"
+       NN_PRPSINFO                                 = "CORE"
+       NN_PRSTATUS                                 = "CORE"
+       NN_PRXFPREG                                 = "LINUX"
+       NN_RISCV_CSR                                = "LINUX"
+       NN_RISCV_TAGGED_ADDR_CTRL                   = "LINUX"
+       NN_RISCV_VECTOR                             = "LINUX"
+       NN_S390_CTRS                                = "LINUX"
+       NN_S390_GS_BC                               = "LINUX"
+       NN_S390_GS_CB                               = "LINUX"
+       NN_S390_HIGH_GPRS                           = "LINUX"
+       NN_S390_LAST_BREAK                          = "LINUX"
+       NN_S390_PREFIX                              = "LINUX"
+       NN_S390_PV_CPU_DATA                         = "LINUX"
+       NN_S390_RI_CB                               = "LINUX"
+       NN_S390_SYSTEM_CALL                         = "LINUX"
+       NN_S390_TDB                                 = "LINUX"
+       NN_S390_TIMER                               = "LINUX"
+       NN_S390_TODCMP                              = "LINUX"
+       NN_S390_TODPREG                             = "LINUX"
+       NN_S390_VXRS_HIGH                           = "LINUX"
+       NN_S390_VXRS_LOW                            = "LINUX"
+       NN_SIGINFO                                  = "CORE"
+       NN_TASKSTRUCT                               = "CORE"
+       NN_VMCOREDD                                 = "LINUX"
+       NN_X86_SHSTK                                = "LINUX"
+       NN_X86_XSAVE_LAYOUT                         = "LINUX"
+       NN_X86_XSTATE                               = "LINUX"
        NSFS_MAGIC                                  = 0x6e736673
+       NT_386_IOPERM                               = 0x201
+       NT_386_TLS                                  = 0x200
+       NT_ARC_V2                                   = 0x600
+       NT_ARM_FPMR                                 = 0x40e
+       NT_ARM_GCS                                  = 0x410
+       NT_ARM_HW_BREAK                             = 0x402
+       NT_ARM_HW_WATCH                             = 0x403
+       NT_ARM_PACA_KEYS                            = 0x407
+       NT_ARM_PACG_KEYS                            = 0x408
+       NT_ARM_PAC_ENABLED_KEYS                     = 0x40a
+       NT_ARM_PAC_MASK                             = 0x406
+       NT_ARM_POE                                  = 0x40f
+       NT_ARM_SSVE                                 = 0x40b
+       NT_ARM_SVE                                  = 0x405
+       NT_ARM_SYSTEM_CALL                          = 0x404
+       NT_ARM_TAGGED_ADDR_CTRL                     = 0x409
+       NT_ARM_TLS                                  = 0x401
+       NT_ARM_VFP                                  = 0x400
+       NT_ARM_ZA                                   = 0x40c
+       NT_ARM_ZT                                   = 0x40d
+       NT_AUXV                                     = 0x6
+       NT_FILE                                     = 0x46494c45
+       NT_GNU_PROPERTY_TYPE_0                      = 0x5
+       NT_LOONGARCH_CPUCFG                         = 0xa00
+       NT_LOONGARCH_CSR                            = 0xa01
+       NT_LOONGARCH_HW_BREAK                       = 0xa05
+       NT_LOONGARCH_HW_WATCH                       = 0xa06
+       NT_LOONGARCH_LASX                           = 0xa03
+       NT_LOONGARCH_LBT                            = 0xa04
+       NT_LOONGARCH_LSX                            = 0xa02
+       NT_MIPS_DSP                                 = 0x800
+       NT_MIPS_FP_MODE                             = 0x801
+       NT_MIPS_MSA                                 = 0x802
+       NT_PPC_DEXCR                                = 0x111
+       NT_PPC_DSCR                                 = 0x105
+       NT_PPC_EBB                                  = 0x106
+       NT_PPC_HASHKEYR                             = 0x112
+       NT_PPC_PKEY                                 = 0x110
+       NT_PPC_PMU                                  = 0x107
+       NT_PPC_PPR                                  = 0x104
+       NT_PPC_SPE                                  = 0x101
+       NT_PPC_TAR                                  = 0x103
+       NT_PPC_TM_CDSCR                             = 0x10f
+       NT_PPC_TM_CFPR                              = 0x109
+       NT_PPC_TM_CGPR                              = 0x108
+       NT_PPC_TM_CPPR                              = 0x10e
+       NT_PPC_TM_CTAR                              = 0x10d
+       NT_PPC_TM_CVMX                              = 0x10a
+       NT_PPC_TM_CVSX                              = 0x10b
+       NT_PPC_TM_SPR                               = 0x10c
+       NT_PPC_VMX                                  = 0x100
+       NT_PPC_VSX                                  = 0x102
+       NT_PRFPREG                                  = 0x2
+       NT_PRPSINFO                                 = 0x3
+       NT_PRSTATUS                                 = 0x1
+       NT_PRXFPREG                                 = 0x46e62b7f
+       NT_RISCV_CSR                                = 0x900
+       NT_RISCV_TAGGED_ADDR_CTRL                   = 0x902
+       NT_RISCV_VECTOR                             = 0x901
+       NT_S390_CTRS                                = 0x304
+       NT_S390_GS_BC                               = 0x30c
+       NT_S390_GS_CB                               = 0x30b
+       NT_S390_HIGH_GPRS                           = 0x300
+       NT_S390_LAST_BREAK                          = 0x306
+       NT_S390_PREFIX                              = 0x305
+       NT_S390_PV_CPU_DATA                         = 0x30e
+       NT_S390_RI_CB                               = 0x30d
+       NT_S390_SYSTEM_CALL                         = 0x307
+       NT_S390_TDB                                 = 0x308
+       NT_S390_TIMER                               = 0x301
+       NT_S390_TODCMP                              = 0x302
+       NT_S390_TODPREG                             = 0x303
+       NT_S390_VXRS_HIGH                           = 0x30a
+       NT_S390_VXRS_LOW                            = 0x309
+       NT_SIGINFO                                  = 0x53494749
+       NT_TASKSTRUCT                               = 0x4
+       NT_VMCOREDD                                 = 0x700
+       NT_X86_SHSTK                                = 0x204
+       NT_X86_XSAVE_LAYOUT                         = 0x205
+       NT_X86_XSTATE                               = 0x202
        OCFS2_SUPER_MAGIC                           = 0x7461636f
        OCRNL                                       = 0x8
        OFDEL                                       = 0x80
@@ -2463,6 +2699,59 @@ const (
        PERF_RECORD_MISC_USER                       = 0x2
        PERF_SAMPLE_BRANCH_PLM_ALL                  = 0x7
        PERF_SAMPLE_WEIGHT_TYPE                     = 0x1004000
+       PF_ALG                                      = 0x26
+       PF_APPLETALK                                = 0x5
+       PF_ASH                                      = 0x12
+       PF_ATMPVC                                   = 0x8
+       PF_ATMSVC                                   = 0x14
+       PF_AX25                                     = 0x3
+       PF_BLUETOOTH                                = 0x1f
+       PF_BRIDGE                                   = 0x7
+       PF_CAIF                                     = 0x25
+       PF_CAN                                      = 0x1d
+       PF_DECnet                                   = 0xc
+       PF_ECONET                                   = 0x13
+       PF_FILE                                     = 0x1
+       PF_IB                                       = 0x1b
+       PF_IEEE802154                               = 0x24
+       PF_INET                                     = 0x2
+       PF_INET6                                    = 0xa
+       PF_IPX                                      = 0x4
+       PF_IRDA                                     = 0x17
+       PF_ISDN                                     = 0x22
+       PF_IUCV                                     = 0x20
+       PF_KCM                                      = 0x29
+       PF_KEY                                      = 0xf
+       PF_LLC                                      = 0x1a
+       PF_LOCAL                                    = 0x1
+       PF_MAX                                      = 0x2e
+       PF_MCTP                                     = 0x2d
+       PF_MPLS                                     = 0x1c
+       PF_NETBEUI                                  = 0xd
+       PF_NETLINK                                  = 0x10
+       PF_NETROM                                   = 0x6
+       PF_NFC                                      = 0x27
+       PF_PACKET                                   = 0x11
+       PF_PHONET                                   = 0x23
+       PF_PPPOX                                    = 0x18
+       PF_QIPCRTR                                  = 0x2a
+       PF_R                                        = 0x4
+       PF_RDS                                      = 0x15
+       PF_ROSE                                     = 0xb
+       PF_ROUTE                                    = 0x10
+       PF_RXRPC                                    = 0x21
+       PF_SECURITY                                 = 0xe
+       PF_SMC                                      = 0x2b
+       PF_SNA                                      = 0x16
+       PF_TIPC                                     = 0x1e
+       PF_UNIX                                     = 0x1
+       PF_UNSPEC                                   = 0x0
+       PF_VSOCK                                    = 0x28
+       PF_W                                        = 0x2
+       PF_WANPIPE                                  = 0x19
+       PF_X                                        = 0x1
+       PF_X25                                      = 0x9
+       PF_XDP                                      = 0x2c
        PID_FS_MAGIC                                = 0x50494446
        PIPEFS_MAGIC                                = 0x50495045
        PPPIOCGNPMODE                               = 0xc008744c
@@ -2758,6 +3047,23 @@ const (
        PTRACE_SYSCALL_INFO_NONE                    = 0x0
        PTRACE_SYSCALL_INFO_SECCOMP                 = 0x3
        PTRACE_TRACEME                              = 0x0
+       PT_AARCH64_MEMTAG_MTE                       = 0x70000002
+       PT_DYNAMIC                                  = 0x2
+       PT_GNU_EH_FRAME                             = 0x6474e550
+       PT_GNU_PROPERTY                             = 0x6474e553
+       PT_GNU_RELRO                                = 0x6474e552
+       PT_GNU_STACK                                = 0x6474e551
+       PT_HIOS                                     = 0x6fffffff
+       PT_HIPROC                                   = 0x7fffffff
+       PT_INTERP                                   = 0x3
+       PT_LOAD                                     = 0x1
+       PT_LOOS                                     = 0x60000000
+       PT_LOPROC                                   = 0x70000000
+       PT_NOTE                                     = 0x4
+       PT_NULL                                     = 0x0
+       PT_PHDR                                     = 0x6
+       PT_SHLIB                                    = 0x5
+       PT_TLS                                      = 0x7
        P_ALL                                       = 0x0
        P_PGID                                      = 0x2
        P_PID                                       = 0x1
@@ -3091,6 +3397,47 @@ const (
        SEEK_MAX                                    = 0x4
        SEEK_SET                                    = 0x0
        SELINUX_MAGIC                               = 0xf97cff8c
+       SHF_ALLOC                                   = 0x2
+       SHF_EXCLUDE                                 = 0x8000000
+       SHF_EXECINSTR                               = 0x4
+       SHF_GROUP                                   = 0x200
+       SHF_INFO_LINK                               = 0x40
+       SHF_LINK_ORDER                              = 0x80
+       SHF_MASKOS                                  = 0xff00000
+       SHF_MASKPROC                                = 0xf0000000
+       SHF_MERGE                                   = 0x10
+       SHF_ORDERED                                 = 0x4000000
+       SHF_OS_NONCONFORMING                        = 0x100
+       SHF_RELA_LIVEPATCH                          = 0x100000
+       SHF_RO_AFTER_INIT                           = 0x200000
+       SHF_STRINGS                                 = 0x20
+       SHF_TLS                                     = 0x400
+       SHF_WRITE                                   = 0x1
+       SHN_ABS                                     = 0xfff1
+       SHN_COMMON                                  = 0xfff2
+       SHN_HIPROC                                  = 0xff1f
+       SHN_HIRESERVE                               = 0xffff
+       SHN_LIVEPATCH                               = 0xff20
+       SHN_LOPROC                                  = 0xff00
+       SHN_LORESERVE                               = 0xff00
+       SHN_UNDEF                                   = 0x0
+       SHT_DYNAMIC                                 = 0x6
+       SHT_DYNSYM                                  = 0xb
+       SHT_HASH                                    = 0x5
+       SHT_HIPROC                                  = 0x7fffffff
+       SHT_HIUSER                                  = 0xffffffff
+       SHT_LOPROC                                  = 0x70000000
+       SHT_LOUSER                                  = 0x80000000
+       SHT_NOBITS                                  = 0x8
+       SHT_NOTE                                    = 0x7
+       SHT_NULL                                    = 0x0
+       SHT_NUM                                     = 0xc
+       SHT_PROGBITS                                = 0x1
+       SHT_REL                                     = 0x9
+       SHT_RELA                                    = 0x4
+       SHT_SHLIB                                   = 0xa
+       SHT_STRTAB                                  = 0x3
+       SHT_SYMTAB                                  = 0x2
        SHUT_RD                                     = 0x0
        SHUT_RDWR                                   = 0x2
        SHUT_WR                                     = 0x1
@@ -3317,6 +3664,16 @@ const (
        STATX_UID                                   = 0x8
        STATX_WRITE_ATOMIC                          = 0x10000
        STATX__RESERVED                             = 0x80000000
+       STB_GLOBAL                                  = 0x1
+       STB_LOCAL                                   = 0x0
+       STB_WEAK                                    = 0x2
+       STT_COMMON                                  = 0x5
+       STT_FILE                                    = 0x4
+       STT_FUNC                                    = 0x2
+       STT_NOTYPE                                  = 0x0
+       STT_OBJECT                                  = 0x1
+       STT_SECTION                                 = 0x3
+       STT_TLS                                     = 0x6
        SYNC_FILE_RANGE_WAIT_AFTER                  = 0x4
        SYNC_FILE_RANGE_WAIT_BEFORE                 = 0x1
        SYNC_FILE_RANGE_WRITE                       = 0x2
@@ -3553,6 +3910,8 @@ const (
        UTIME_OMIT                                  = 0x3ffffffe
        V9FS_MAGIC                                  = 0x1021997
        VERASE                                      = 0x2
+       VER_FLG_BASE                                = 0x1
+       VER_FLG_WEAK                                = 0x2
        VINTR                                       = 0x0
        VKILL                                       = 0x3
        VLNEXT                                      = 0xf
index 5cc1e8eb2f35e097af432fd2273a2a73c1d35b36..8935d10a31ce98d0a7ff4e103824e2cf770a6903 100644 (file)
@@ -2238,3 +2238,13 @@ func Mseal(b []byte, flags uint) (err error) {
        }
        return
 }
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setMemPolicy(mode int, mask *CPUSet, size int) (err error) {
+       _, _, e1 := Syscall(SYS_SET_MEMPOLICY, uintptr(mode), uintptr(unsafe.Pointer(mask)), uintptr(size))
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
index 944e75a11cb1d6273fcc6ebd6c3f8c03327226da..c1a4670171984d1321065b166640bffe78a557ab 100644 (file)
@@ -3590,6 +3590,8 @@ type Nhmsg struct {
        Flags    uint32
 }
 
+const SizeofNhmsg = 0x8
+
 type NexthopGrp struct {
        Id     uint32
        Weight uint8
@@ -3597,6 +3599,8 @@ type NexthopGrp struct {
        Resvd2 uint16
 }
 
+const SizeofNexthopGrp = 0x8
+
 const (
        NHA_UNSPEC     = 0x0
        NHA_ID         = 0x1
@@ -6332,3 +6336,30 @@ type SockDiagReq struct {
 }
 
 const RTM_NEWNVLAN = 0x70
+
+const (
+       MPOL_BIND                = 0x2
+       MPOL_DEFAULT             = 0x0
+       MPOL_F_ADDR              = 0x2
+       MPOL_F_MEMS_ALLOWED      = 0x4
+       MPOL_F_MOF               = 0x8
+       MPOL_F_MORON             = 0x10
+       MPOL_F_NODE              = 0x1
+       MPOL_F_NUMA_BALANCING    = 0x2000
+       MPOL_F_RELATIVE_NODES    = 0x4000
+       MPOL_F_SHARED            = 0x1
+       MPOL_F_STATIC_NODES      = 0x8000
+       MPOL_INTERLEAVE          = 0x3
+       MPOL_LOCAL               = 0x4
+       MPOL_MAX                 = 0x7
+       MPOL_MF_INTERNAL         = 0x10
+       MPOL_MF_LAZY             = 0x8
+       MPOL_MF_MOVE_ALL         = 0x4
+       MPOL_MF_MOVE             = 0x2
+       MPOL_MF_STRICT           = 0x1
+       MPOL_MF_VALID            = 0x7
+       MPOL_MODE_FLAGS          = 0xe000
+       MPOL_PREFERRED           = 0x1
+       MPOL_PREFERRED_MANY      = 0x5
+       MPOL_WEIGHTED_INTERLEAVE = 0x6
+)
index bd51337306019a3e32bab25efa113a35ba71342f..69439df2a468091a7c949c401e1e93d808672ab9 100644 (file)
@@ -892,8 +892,12 @@ const socket_error = uintptr(^uint32(0))
 //sys  MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar
 //sys  getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx
 //sys   GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex
+//sys   GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) = iphlpapi.GetIpForwardEntry2
+//sys   GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) = iphlpapi.GetIpForwardTable2
 //sys   GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry
+//sys   FreeMibTable(memory unsafe.Pointer) = iphlpapi.FreeMibTable
 //sys   NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange
+//sys   NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyRouteChange2
 //sys   NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange
 //sys   CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2
 
@@ -916,6 +920,17 @@ type RawSockaddrInet6 struct {
        Scope_id uint32
 }
 
+// RawSockaddrInet is a union that contains an IPv4, an IPv6 address, or an address family. See
+// https://learn.microsoft.com/en-us/windows/win32/api/ws2ipdef/ns-ws2ipdef-sockaddr_inet.
+//
+// A [*RawSockaddrInet] may be converted to a [*RawSockaddrInet4] or [*RawSockaddrInet6] using
+// unsafe, depending on the address family.
+type RawSockaddrInet struct {
+       Family uint16
+       Port   uint16
+       Data   [6]uint32
+}
+
 type RawSockaddr struct {
        Family uint16
        Data   [14]int8
index 358be3c7f5eece5238c208c0e100a3153b3f5f18..6e4f50eb483567020df060df1eb270b5706bb1c0 100644 (file)
@@ -2320,6 +2320,82 @@ type MibIfRow2 struct {
        OutQLen                     uint64
 }
 
+// IP_ADDRESS_PREFIX stores an IP address prefix. See
+// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-ip_address_prefix.
+type IpAddressPrefix struct {
+       Prefix       RawSockaddrInet
+       PrefixLength uint8
+}
+
+// NL_ROUTE_ORIGIN enumeration from nldef.h or
+// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_route_origin.
+const (
+       NlroManual              = 0
+       NlroWellKnown           = 1
+       NlroDHCP                = 2
+       NlroRouterAdvertisement = 3
+       Nlro6to4                = 4
+)
+
+// NL_ROUTE_ORIGIN enumeration from nldef.h or
+// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_route_protocol.
+const (
+       MIB_IPPROTO_OTHER             = 1
+       MIB_IPPROTO_LOCAL             = 2
+       MIB_IPPROTO_NETMGMT           = 3
+       MIB_IPPROTO_ICMP              = 4
+       MIB_IPPROTO_EGP               = 5
+       MIB_IPPROTO_GGP               = 6
+       MIB_IPPROTO_HELLO             = 7
+       MIB_IPPROTO_RIP               = 8
+       MIB_IPPROTO_IS_IS             = 9
+       MIB_IPPROTO_ES_IS             = 10
+       MIB_IPPROTO_CISCO             = 11
+       MIB_IPPROTO_BBN               = 12
+       MIB_IPPROTO_OSPF              = 13
+       MIB_IPPROTO_BGP               = 14
+       MIB_IPPROTO_IDPR              = 15
+       MIB_IPPROTO_EIGRP             = 16
+       MIB_IPPROTO_DVMRP             = 17
+       MIB_IPPROTO_RPL               = 18
+       MIB_IPPROTO_DHCP              = 19
+       MIB_IPPROTO_NT_AUTOSTATIC     = 10002
+       MIB_IPPROTO_NT_STATIC         = 10006
+       MIB_IPPROTO_NT_STATIC_NON_DOD = 10007
+)
+
+// MIB_IPFORWARD_ROW2 stores information about an IP route entry. See
+// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipforward_row2.
+type MibIpForwardRow2 struct {
+       InterfaceLuid        uint64
+       InterfaceIndex       uint32
+       DestinationPrefix    IpAddressPrefix
+       NextHop              RawSockaddrInet
+       SitePrefixLength     uint8
+       ValidLifetime        uint32
+       PreferredLifetime    uint32
+       Metric               uint32
+       Protocol             uint32
+       Loopback             uint8
+       AutoconfigureAddress uint8
+       Publish              uint8
+       Immortal             uint8
+       Age                  uint32
+       Origin               uint32
+}
+
+// MIB_IPFORWARD_TABLE2 contains a table of IP route entries. See
+// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipforward_table2.
+type MibIpForwardTable2 struct {
+       NumEntries uint32
+       Table      [1]MibIpForwardRow2
+}
+
+// Rows returns the IP route entries in the table.
+func (t *MibIpForwardTable2) Rows() []MibIpForwardRow2 {
+       return unsafe.Slice(&t.Table[0], t.NumEntries)
+}
+
 // MIB_UNICASTIPADDRESS_ROW stores information about a unicast IP address. See
 // https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_row.
 type MibUnicastIpAddressRow struct {
index 426151a0193d355f90726fe3d19bd241946a8abf..f25b7308a1f3b7b9e82c21aaa46ef95bcd6a79e9 100644 (file)
@@ -182,13 +182,17 @@ var (
        procDwmGetWindowAttribute                                = moddwmapi.NewProc("DwmGetWindowAttribute")
        procDwmSetWindowAttribute                                = moddwmapi.NewProc("DwmSetWindowAttribute")
        procCancelMibChangeNotify2                               = modiphlpapi.NewProc("CancelMibChangeNotify2")
+       procFreeMibTable                                         = modiphlpapi.NewProc("FreeMibTable")
        procGetAdaptersAddresses                                 = modiphlpapi.NewProc("GetAdaptersAddresses")
        procGetAdaptersInfo                                      = modiphlpapi.NewProc("GetAdaptersInfo")
        procGetBestInterfaceEx                                   = modiphlpapi.NewProc("GetBestInterfaceEx")
        procGetIfEntry                                           = modiphlpapi.NewProc("GetIfEntry")
        procGetIfEntry2Ex                                        = modiphlpapi.NewProc("GetIfEntry2Ex")
+       procGetIpForwardEntry2                                   = modiphlpapi.NewProc("GetIpForwardEntry2")
+       procGetIpForwardTable2                                   = modiphlpapi.NewProc("GetIpForwardTable2")
        procGetUnicastIpAddressEntry                             = modiphlpapi.NewProc("GetUnicastIpAddressEntry")
        procNotifyIpInterfaceChange                              = modiphlpapi.NewProc("NotifyIpInterfaceChange")
+       procNotifyRouteChange2                                   = modiphlpapi.NewProc("NotifyRouteChange2")
        procNotifyUnicastIpAddressChange                         = modiphlpapi.NewProc("NotifyUnicastIpAddressChange")
        procAddDllDirectory                                      = modkernel32.NewProc("AddDllDirectory")
        procAssignProcessToJobObject                             = modkernel32.NewProc("AssignProcessToJobObject")
@@ -1624,6 +1628,11 @@ func CancelMibChangeNotify2(notificationHandle Handle) (errcode error) {
        return
 }
 
+func FreeMibTable(memory unsafe.Pointer) {
+       syscall.SyscallN(procFreeMibTable.Addr(), uintptr(memory))
+       return
+}
+
 func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) {
        r0, _, _ := syscall.SyscallN(procGetAdaptersAddresses.Addr(), uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)))
        if r0 != 0 {
@@ -1664,6 +1673,22 @@ func GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) {
        return
 }
 
+func GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) {
+       r0, _, _ := syscall.SyscallN(procGetIpForwardEntry2.Addr(), uintptr(unsafe.Pointer(row)))
+       if r0 != 0 {
+               errcode = syscall.Errno(r0)
+       }
+       return
+}
+
+func GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) {
+       r0, _, _ := syscall.SyscallN(procGetIpForwardTable2.Addr(), uintptr(family), uintptr(unsafe.Pointer(table)))
+       if r0 != 0 {
+               errcode = syscall.Errno(r0)
+       }
+       return
+}
+
 func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) {
        r0, _, _ := syscall.SyscallN(procGetUnicastIpAddressEntry.Addr(), uintptr(unsafe.Pointer(row)))
        if r0 != 0 {
@@ -1684,6 +1709,18 @@ func NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsa
        return
 }
 
+func NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {
+       var _p0 uint32
+       if initialNotification {
+               _p0 = 1
+       }
+       r0, _, _ := syscall.SyscallN(procNotifyRouteChange2.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle)))
+       if r0 != 0 {
+               errcode = syscall.Errno(r0)
+       }
+       return
+}
+
 func NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) {
        var _p0 uint32
        if initialNotification {
index bddb2e2aebd4a194afd0c7186289dcdeb1718a0b..9255449b9b32f615821993146c5eb68328dcdf1c 100644 (file)
@@ -413,7 +413,7 @@ func (t *Terminal) eraseNPreviousChars(n int) {
        }
 }
 
-// countToLeftWord returns then number of characters from the cursor to the
+// countToLeftWord returns the number of characters from the cursor to the
 // start of the previous word.
 func (t *Terminal) countToLeftWord() int {
        if t.pos == 0 {
@@ -438,7 +438,7 @@ func (t *Terminal) countToLeftWord() int {
        return t.pos - pos
 }
 
-// countToRightWord returns then number of characters from the cursor to the
+// countToRightWord returns the number of characters from the cursor to the
 // start of the next word.
 func (t *Terminal) countToRightWord() int {
        pos := t.pos
@@ -478,7 +478,7 @@ func visualLength(runes []rune) int {
        return length
 }
 
-// histroryAt unlocks the terminal and relocks it while calling History.At.
+// historyAt unlocks the terminal and relocks it while calling History.At.
 func (t *Terminal) historyAt(idx int) (string, bool) {
        t.lock.Unlock()     // Unlock to avoid deadlock if History methods use the output writer.
        defer t.lock.Lock() // panic in At (or Len) protection.
index 9d2ae547b5ed4d91ba20783bd00eec10fc2d0247..fb8273236dde6e8cfa4d0ddd02437906be1603d3 100644 (file)
@@ -427,13 +427,6 @@ type isolatingRunSequence struct {
 
 func (i *isolatingRunSequence) Len() int { return len(i.indexes) }
 
-func maxLevel(a, b level) level {
-       if a > b {
-               return a
-       }
-       return b
-}
-
 // Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types,
 // either L or R, for each isolating run sequence.
 func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence {
@@ -474,8 +467,8 @@ func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence {
                indexes: indexes,
                types:   types,
                level:   level,
-               sos:     typeForLevel(maxLevel(prevLevel, level)),
-               eos:     typeForLevel(maxLevel(succLevel, level)),
+               sos:     typeForLevel(max(prevLevel, level)),
+               eos:     typeForLevel(max(succLevel, level)),
        }
 }
 
index 5e5601aa467755b41160ff4d2b5f797cf4b0e774..5bacc0fa49e03120815615269772c629b2def4aa 100644 (file)
@@ -209,48 +209,46 @@ func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool)
 // DeleteNamedImport deletes the import with the given name and path from the file f, if present.
 // If there are duplicate import declarations, all matching ones are deleted.
 func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) {
-       var delspecs []*ast.ImportSpec
-       var delcomments []*ast.CommentGroup
+       var (
+               delspecs    = make(map[*ast.ImportSpec]bool)
+               delcomments = make(map[*ast.CommentGroup]bool)
+       )
 
        // Find the import nodes that import path, if any.
        for i := 0; i < len(f.Decls); i++ {
-               decl := f.Decls[i]
-               gen, ok := decl.(*ast.GenDecl)
+               gen, ok := f.Decls[i].(*ast.GenDecl)
                if !ok || gen.Tok != token.IMPORT {
                        continue
                }
                for j := 0; j < len(gen.Specs); j++ {
-                       spec := gen.Specs[j]
-                       impspec := spec.(*ast.ImportSpec)
+                       impspec := gen.Specs[j].(*ast.ImportSpec)
                        if importName(impspec) != name || importPath(impspec) != path {
                                continue
                        }
 
                        // We found an import spec that imports path.
                        // Delete it.
-                       delspecs = append(delspecs, impspec)
+                       delspecs[impspec] = true
                        deleted = true
-                       copy(gen.Specs[j:], gen.Specs[j+1:])
-                       gen.Specs = gen.Specs[:len(gen.Specs)-1]
+                       gen.Specs = slices.Delete(gen.Specs, j, j+1)
 
                        // If this was the last import spec in this decl,
                        // delete the decl, too.
                        if len(gen.Specs) == 0 {
-                               copy(f.Decls[i:], f.Decls[i+1:])
-                               f.Decls = f.Decls[:len(f.Decls)-1]
+                               f.Decls = slices.Delete(f.Decls, i, i+1)
                                i--
                                break
                        } else if len(gen.Specs) == 1 {
                                if impspec.Doc != nil {
-                                       delcomments = append(delcomments, impspec.Doc)
+                                       delcomments[impspec.Doc] = true
                                }
                                if impspec.Comment != nil {
-                                       delcomments = append(delcomments, impspec.Comment)
+                                       delcomments[impspec.Comment] = true
                                }
                                for _, cg := range f.Comments {
                                        // Found comment on the same line as the import spec.
                                        if cg.End() < impspec.Pos() && fset.Position(cg.End()).Line == fset.Position(impspec.Pos()).Line {
-                                               delcomments = append(delcomments, cg)
+                                               delcomments[cg] = true
                                                break
                                        }
                                }
@@ -294,38 +292,21 @@ func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (del
        }
 
        // Delete imports from f.Imports.
-       for i := 0; i < len(f.Imports); i++ {
-               imp := f.Imports[i]
-               for j, del := range delspecs {
-                       if imp == del {
-                               copy(f.Imports[i:], f.Imports[i+1:])
-                               f.Imports = f.Imports[:len(f.Imports)-1]
-                               copy(delspecs[j:], delspecs[j+1:])
-                               delspecs = delspecs[:len(delspecs)-1]
-                               i--
-                               break
-                       }
-               }
+       before := len(f.Imports)
+       f.Imports = slices.DeleteFunc(f.Imports, func(imp *ast.ImportSpec) bool {
+               _, ok := delspecs[imp]
+               return ok
+       })
+       if len(f.Imports)+len(delspecs) != before {
+               // This can happen when the AST is invalid (i.e. imports differ between f.Decls and f.Imports).
+               panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs))
        }
 
        // Delete comments from f.Comments.
-       for i := 0; i < len(f.Comments); i++ {
-               cg := f.Comments[i]
-               for j, del := range delcomments {
-                       if cg == del {
-                               copy(f.Comments[i:], f.Comments[i+1:])
-                               f.Comments = f.Comments[:len(f.Comments)-1]
-                               copy(delcomments[j:], delcomments[j+1:])
-                               delcomments = delcomments[:len(delcomments)-1]
-                               i--
-                               break
-                       }
-               }
-       }
-
-       if len(delspecs) > 0 {
-               panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs))
-       }
+       f.Comments = slices.DeleteFunc(f.Comments, func(cg *ast.CommentGroup) bool {
+               _, ok := delcomments[cg]
+               return ok
+       })
 
        return
 }
index 31c8d2f24096df026537e63c7503c7a1f1d497dc..7e72d3c284b8abb5c40fc609d425063d7e81fb8c 100644 (file)
@@ -40,7 +40,7 @@ type Cursor struct {
 // Root returns a cursor for the virtual root node,
 // whose children are the files provided to [New].
 //
-// Its [Cursor.Node] and [Cursor.Stack] methods return nil.
+// Its [Cursor.Node] method return nil.
 func (in *Inspector) Root() Cursor {
        return Cursor{in, -1}
 }
index 89f89dd2dce5178c9ebe05fdd5fb2906b3af2d10..680a70ca8f0daa34052a09bd7ddbe65eea682b0a 100644 (file)
@@ -364,12 +364,6 @@ type jsonPackage struct {
        DepsErrors []*packagesinternal.PackageError
 }
 
-type jsonPackageError struct {
-       ImportStack []string
-       Pos         string
-       Err         string
-}
-
 func otherFiles(p *jsonPackage) [][]string {
        return [][]string{p.CFiles, p.CXXFiles, p.MFiles, p.HFiles, p.FFiles, p.SFiles, p.SwigFiles, p.SwigCXXFiles, p.SysoFiles}
 }
index df14ffd94dc3edbd18133cbc7bc2d78ed65fe174..af6a60d75f87fd59f3c89b0a3962c3cf5f1f3d89 100644 (file)
@@ -5,9 +5,11 @@
 package packages
 
 import (
+       "cmp"
        "fmt"
+       "iter"
        "os"
-       "sort"
+       "slices"
 )
 
 // Visit visits all the packages in the import graph whose roots are
@@ -16,6 +18,20 @@ import (
 // package's dependencies have been visited (postorder).
 // The boolean result of pre(pkg) determines whether
 // the imports of package pkg are visited.
+//
+// Example:
+//
+//     pkgs, err := Load(...)
+//     if err != nil { ... }
+//     Visit(pkgs, nil, func(pkg *Package) {
+//             log.Println(pkg)
+//     })
+//
+// In most cases, it is more convenient to use [Postorder]:
+//
+//     for pkg := range Postorder(pkgs) {
+//             log.Println(pkg)
+//     }
 func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) {
        seen := make(map[*Package]bool)
        var visit func(*Package)
@@ -24,13 +40,8 @@ func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) {
                        seen[pkg] = true
 
                        if pre == nil || pre(pkg) {
-                               paths := make([]string, 0, len(pkg.Imports))
-                               for path := range pkg.Imports {
-                                       paths = append(paths, path)
-                               }
-                               sort.Strings(paths) // Imports is a map, this makes visit stable
-                               for _, path := range paths {
-                                       visit(pkg.Imports[path])
+                               for _, imp := range sorted(pkg.Imports) { // for determinism
+                                       visit(imp)
                                }
                        }
 
@@ -50,7 +61,7 @@ func Visit(pkgs []*Package, pre func(*Package) bool, post func(*Package)) {
 func PrintErrors(pkgs []*Package) int {
        var n int
        errModules := make(map[*Module]bool)
-       Visit(pkgs, nil, func(pkg *Package) {
+       for pkg := range Postorder(pkgs) {
                for _, err := range pkg.Errors {
                        fmt.Fprintln(os.Stderr, err)
                        n++
@@ -63,6 +74,60 @@ func PrintErrors(pkgs []*Package) int {
                        fmt.Fprintln(os.Stderr, mod.Error.Err)
                        n++
                }
-       })
+       }
        return n
 }
+
+// Postorder returns an iterator over the the packages in
+// the import graph whose roots are pkg.
+// Packages are enumerated in dependencies-first order.
+func Postorder(pkgs []*Package) iter.Seq[*Package] {
+       return func(yield func(*Package) bool) {
+               seen := make(map[*Package]bool)
+               var visit func(*Package) bool
+               visit = func(pkg *Package) bool {
+                       if !seen[pkg] {
+                               seen[pkg] = true
+                               for _, imp := range sorted(pkg.Imports) { // for determinism
+                                       if !visit(imp) {
+                                               return false
+                                       }
+                               }
+                               if !yield(pkg) {
+                                       return false
+                               }
+                       }
+                       return true
+               }
+               for _, pkg := range pkgs {
+                       if !visit(pkg) {
+                               break
+                       }
+               }
+       }
+}
+
+// -- copied from golang.org.x/tools/gopls/internal/util/moremaps --
+
+// sorted returns an iterator over the entries of m in key order.
+func sorted[M ~map[K]V, K cmp.Ordered, V any](m M) iter.Seq2[K, V] {
+       // TODO(adonovan): use maps.Sorted if proposal #68598 is accepted.
+       return func(yield func(K, V) bool) {
+               keys := keySlice(m)
+               slices.Sort(keys)
+               for _, k := range keys {
+                       if !yield(k, m[k]) {
+                               break
+                       }
+               }
+       }
+}
+
+// KeySlice returns the keys of the map M, like slices.Collect(maps.Keys(m)).
+func keySlice[M ~map[K]V, K comparable, V any](m M) []K {
+       r := make([]K, 0, len(m))
+       for k := range m {
+               r = append(r, k)
+       }
+       return r
+}
index d3c2913bef336a0dba14e9abab5c80d685501651..6c0c74968f3538dc9c46f9d3b7e0af3e991df2ad 100644 (file)
@@ -698,7 +698,10 @@ func Object(pkg *types.Package, p Path) (types.Object, error) {
                        } else if false && aliases.Enabled() {
                                // The Enabled check is too expensive, so for now we
                                // simply assume that aliases are not enabled.
-                               // TODO(adonovan): replace with "if true {" when go1.24 is assured.
+                               //
+                               // Now that go1.24 is assured, we should be able to
+                               // replace this with "if true {", but it causes tests
+                               // to fail. TODO(adonovan): investigate.
                                return nil, fmt.Errorf("cannot apply %q to %s (got %T, want alias)", code, t, t)
                        }
 
index b6d542c64ee64a5ee7c19702449a5c84de6aa4d1..f035a0b6be92c93c8a528c99560f23c37c905e09 100644 (file)
@@ -11,7 +11,6 @@ import (
        "fmt"
        "go/types"
        "hash/maphash"
-       "unsafe"
 
        "golang.org/x/tools/internal/typeparams"
 )
@@ -380,22 +379,8 @@ var theSeed = maphash.MakeSeed()
 func (hasher) hashTypeName(tname *types.TypeName) uint32 {
        // Since types.Identical uses == to compare TypeNames,
        // the Hash function uses maphash.Comparable.
-       // TODO(adonovan): or will, when it becomes available in go1.24.
-       // In the meantime we use the pointer's numeric value.
-       //
-       //   hash := maphash.Comparable(theSeed, tname)
-       //
-       // (Another approach would be to hash the name and package
-       // path, and whether or not it is a package-level typename. It
-       // is rare for a package to define multiple local types with
-       // the same name.)
-       ptr := uintptr(unsafe.Pointer(tname))
-       if unsafe.Sizeof(ptr) == 8 {
-               hash := uint64(ptr)
-               return uint32(hash ^ (hash >> 32))
-       } else {
-               return uint32(ptr)
-       }
+       hash := maphash.Comparable(theSeed, tname)
+       return uint32(hash ^ (hash >> 32))
 }
 
 // shallowHash computes a hash of t without looking at any of its
index cb6db8893f947c8f77486e9fd7fb5ef501571214..22ae777726768263807a8da5f4ba69430d6c4acc 100644 (file)
@@ -69,9 +69,3 @@ func Process(filename string, src []byte, opt *Options) ([]byte, error) {
        }
        return intimp.Process(filename, src, intopt)
 }
-
-// VendorlessPath returns the devendorized version of the import path ipath.
-// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b".
-func VendorlessPath(ipath string) string {
-       return intimp.VendorlessPath(ipath)
-}
index a6cf0e64a4b17f89fba037bb953d8488b947d856..ade5d1e799d64a92d3440547aafc906a2c50bc11 100644 (file)
@@ -28,11 +28,6 @@ type Event struct {
        dynamic []label.Label  // dynamically sized storage for remaining labels
 }
 
-// eventLabelMap implements label.Map for a the labels of an Event.
-type eventLabelMap struct {
-       event Event
-}
-
 func (ev Event) At() time.Time { return ev.at }
 
 func (ev Event) Format(f fmt.State, r rune) {
index 780873e3ae784048d7b0be8d95f70ebbd5521fd6..4a4357d2bd444935f78c6d781592cf604e0bcce0 100644 (file)
@@ -569,7 +569,6 @@ func (p *iexporter) exportName(obj types.Object) (res string) {
 
 type iexporter struct {
        fset    *token.FileSet
-       out     *bytes.Buffer
        version int
 
        shallow    bool                // don't put types from other packages in the index
diff --git a/vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go b/vendor/golang.org/x/tools/internal/gcimporter/iimport_go122.go
deleted file mode 100644 (file)
index 7586bfa..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2024 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.22 && !go1.24
-
-package gcimporter
-
-import (
-       "go/token"
-       "go/types"
-       "unsafe"
-)
-
-// TODO(rfindley): delete this workaround once go1.24 is assured.
-
-func init() {
-       // Update markBlack so that it correctly sets the color
-       // of imported TypeNames.
-       //
-       // See the doc comment for markBlack for details.
-
-       type color uint32
-       const (
-               white color = iota
-               black
-               grey
-       )
-       type object struct {
-               _      *types.Scope
-               _      token.Pos
-               _      *types.Package
-               _      string
-               _      types.Type
-               _      uint32
-               color_ color
-               _      token.Pos
-       }
-       type typeName struct {
-               object
-       }
-
-       // If the size of types.TypeName changes, this will fail to compile.
-       const delta = int64(unsafe.Sizeof(typeName{})) - int64(unsafe.Sizeof(types.TypeName{}))
-       var _ [-delta * delta]int
-
-       markBlack = func(obj *types.TypeName) {
-               type uP = unsafe.Pointer
-               var ptr *typeName
-               *(*uP)(uP(&ptr)) = uP(obj)
-               ptr.color_ = black
-       }
-}
index 50b6ca51a6b1d335742d126420839b671de9a1dd..1b4dc0cb5daeace8888e91e8b740ff6c4654c402 100644 (file)
@@ -16,6 +16,7 @@ import (
        "go/types"
        "io/fs"
        "io/ioutil"
+       "maps"
        "os"
        "path"
        "path/filepath"
@@ -27,8 +28,6 @@ import (
        "unicode"
        "unicode/utf8"
 
-       "maps"
-
        "golang.org/x/tools/go/ast/astutil"
        "golang.org/x/tools/internal/event"
        "golang.org/x/tools/internal/gocommand"
@@ -43,7 +42,7 @@ var importToGroup = []func(localPrefix, importPath string) (num int, ok bool){
                if localPrefix == "" {
                        return
                }
-               for _, p := range strings.Split(localPrefix, ",") {
+               for p := range strings.SplitSeq(localPrefix, ",") {
                        if strings.HasPrefix(importPath, p) || strings.TrimSuffix(p, "/") == importPath {
                                return 3, true
                        }
@@ -1251,7 +1250,6 @@ func ImportPathToAssumedName(importPath string) string {
 // gopathResolver implements resolver for GOPATH workspaces.
 type gopathResolver struct {
        env      *ProcessEnv
-       walked   bool
        cache    *DirInfoCache
        scanSema chan struct{} // scanSema prevents concurrent scans.
 }
index fe24db9b13f21e145353d495f9f737630ee5e7a6..8e9702d84be48077a95114410b4299a8b5ef5796 100644 (file)
@@ -206,8 +206,7 @@ func isDeprecated(doc *ast.CommentGroup) bool {
        // go.dev/wiki/Deprecated Paragraph starting 'Deprecated:'
        // This code fails for /* Deprecated: */, but it's the code from
        // gopls/internal/analysis/deprecated
-       lines := strings.Split(doc.Text(), "\n\n")
-       for _, line := range lines {
+       for line := range strings.SplitSeq(doc.Text(), "\n\n") {
                if strings.HasPrefix(line, "Deprecated:") {
                        return true
                }
index 77cf8d2181ae465ad5022b0d163ec2b6889a8ef6..96ad6c582105e7e0e64b76b455019c23ffd5a6d5 100644 (file)
@@ -12,348 +12,354 @@ type pkginfo struct {
 }
 
 var deps = [...]pkginfo{
-       {"archive/tar", "\x03j\x03E5\x01\v\x01#\x01\x01\x02\x05\n\x02\x01\x02\x02\v"},
-       {"archive/zip", "\x02\x04`\a\x16\x0205\x01+\x05\x01\x11\x03\x02\r\x04"},
-       {"bufio", "\x03j}F\x13"},
-       {"bytes", "m+R\x03\fH\x02\x02"},
+       {"archive/tar", "\x03k\x03E;\x01\n\x01$\x01\x01\x02\x05\b\x02\x01\x02\x02\f"},
+       {"archive/zip", "\x02\x04a\a\x03\x12\x021;\x01+\x05\x01\x0f\x03\x02\x0e\x04"},
+       {"bufio", "\x03k\x83\x01D\x14"},
+       {"bytes", "n*Y\x03\fG\x02\x02"},
        {"cmp", ""},
-       {"compress/bzip2", "\x02\x02\xe6\x01C"},
-       {"compress/flate", "\x02k\x03z\r\x025\x01\x03"},
-       {"compress/gzip", "\x02\x04`\a\x03\x15eU"},
-       {"compress/lzw", "\x02k\x03z"},
-       {"compress/zlib", "\x02\x04`\a\x03\x13\x01f"},
-       {"container/heap", "\xae\x02"},
+       {"compress/bzip2", "\x02\x02\xed\x01A"},
+       {"compress/flate", "\x02l\x03\x80\x01\f\x033\x01\x03"},
+       {"compress/gzip", "\x02\x04a\a\x03\x14lT"},
+       {"compress/lzw", "\x02l\x03\x80\x01"},
+       {"compress/zlib", "\x02\x04a\a\x03\x12\x01m"},
+       {"container/heap", "\xb3\x02"},
        {"container/list", ""},
        {"container/ring", ""},
-       {"context", "m\\i\x01\f"},
-       {"crypto", "\x83\x01gE"},
-       {"crypto/aes", "\x10\n\a\x8e\x02"},
-       {"crypto/cipher", "\x03\x1e\x01\x01\x1d\x11\x1c,Q"},
-       {"crypto/des", "\x10\x13\x1d-,\x96\x01\x03"},
-       {"crypto/dsa", "@\x04)}\x0e"},
-       {"crypto/ecdh", "\x03\v\f\x0e\x04\x14\x04\r\x1c}"},
-       {"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x0e\x16\x01\x04\f\x01\x1c}\x0e\x04L\x01"},
-       {"crypto/ed25519", "\x0e\x1c\x16\n\a\x1c}E"},
-       {"crypto/elliptic", "0=}\x0e:"},
-       {"crypto/fips140", " \x05\x90\x01"},
-       {"crypto/hkdf", "-\x12\x01-\x16"},
-       {"crypto/hmac", "\x1a\x14\x11\x01\x112"},
+       {"context", "n\\m\x01\r"},
+       {"crypto", "\x83\x01nC"},
+       {"crypto/aes", "\x10\n\a\x93\x02"},
+       {"crypto/cipher", "\x03\x1e\x01\x01\x1e\x11\x1c+X"},
+       {"crypto/des", "\x10\x13\x1e-+\x9b\x01\x03"},
+       {"crypto/dsa", "A\x04)\x83\x01\r"},
+       {"crypto/ecdh", "\x03\v\f\x0e\x04\x15\x04\r\x1c\x83\x01"},
+       {"crypto/ecdsa", "\x0e\x05\x03\x04\x01\x0e\a\v\x05\x01\x04\f\x01\x1c\x83\x01\r\x05K\x01"},
+       {"crypto/ed25519", "\x0e\x1c\x11\x06\n\a\x1c\x83\x01C"},
+       {"crypto/elliptic", "0>\x83\x01\r9"},
+       {"crypto/fips140", " \x05"},
+       {"crypto/hkdf", "-\x13\x01-\x15"},
+       {"crypto/hmac", "\x1a\x14\x12\x01\x111"},
        {"crypto/internal/boring", "\x0e\x02\rf"},
-       {"crypto/internal/boring/bbig", "\x1a\xde\x01M"},
-       {"crypto/internal/boring/bcache", "\xb3\x02\x12"},
+       {"crypto/internal/boring/bbig", "\x1a\xe4\x01M"},
+       {"crypto/internal/boring/bcache", "\xb8\x02\x13"},
        {"crypto/internal/boring/sig", ""},
-       {"crypto/internal/cryptotest", "\x03\r\n)\x0e\x19\x06\x13\x12#\a\t\x11\x11\x11\x1b\x01\f\r\x05\n"},
-       {"crypto/internal/entropy", "E"},
-       {"crypto/internal/fips140", ">/}9\r\x15"},
-       {"crypto/internal/fips140/aes", "\x03\x1d\x03\x02\x13\x04\x01\x01\x05*\x8c\x016"},
-       {"crypto/internal/fips140/aes/gcm", " \x01\x02\x02\x02\x11\x04\x01\x06*\x8a\x01"},
-       {"crypto/internal/fips140/alias", "\xc5\x02"},
-       {"crypto/internal/fips140/bigmod", "%\x17\x01\x06*\x8c\x01"},
-       {"crypto/internal/fips140/check", " \x0e\x06\b\x02\xac\x01["},
-       {"crypto/internal/fips140/check/checktest", "%\xfe\x01\""},
-       {"crypto/internal/fips140/drbg", "\x03\x1c\x01\x01\x04\x13\x04\b\x01(}\x0f9"},
-       {"crypto/internal/fips140/ecdh", "\x03\x1d\x05\x02\t\f1}\x0f9"},
-       {"crypto/internal/fips140/ecdsa", "\x03\x1d\x04\x01\x02\a\x02\x067}H"},
-       {"crypto/internal/fips140/ed25519", "\x03\x1d\x05\x02\x04\v7\xc2\x01\x03"},
-       {"crypto/internal/fips140/edwards25519", "%\a\f\x041\x8c\x019"},
-       {"crypto/internal/fips140/edwards25519/field", "%\x13\x041\x8c\x01"},
-       {"crypto/internal/fips140/hkdf", "\x03\x1d\x05\t\x069"},
-       {"crypto/internal/fips140/hmac", "\x03\x1d\x14\x01\x017"},
-       {"crypto/internal/fips140/mlkem", "\x03\x1d\x05\x02\x0e\x03\x041"},
-       {"crypto/internal/fips140/nistec", "%\f\a\x041\x8c\x01*\x0f\x13"},
-       {"crypto/internal/fips140/nistec/fiat", "%\x135\x8c\x01"},
-       {"crypto/internal/fips140/pbkdf2", "\x03\x1d\x05\t\x069"},
-       {"crypto/internal/fips140/rsa", "\x03\x1d\x04\x01\x02\r\x01\x01\x025}H"},
-       {"crypto/internal/fips140/sha256", "\x03\x1d\x1c\x01\x06*\x8c\x01"},
-       {"crypto/internal/fips140/sha3", "\x03\x1d\x18\x04\x010\x8c\x01L"},
-       {"crypto/internal/fips140/sha512", "\x03\x1d\x1c\x01\x06*\x8c\x01"},
-       {"crypto/internal/fips140/ssh", " \x05"},
-       {"crypto/internal/fips140/subtle", "#"},
-       {"crypto/internal/fips140/tls12", "\x03\x1d\x05\t\x06\x027"},
-       {"crypto/internal/fips140/tls13", "\x03\x1d\x05\b\a\b1"},
+       {"crypto/internal/cryptotest", "\x03\r\n\x06$\x0e\x19\x06\x12\x12 \x04\a\t\x16\x01\x11\x11\x1b\x01\a\x05\b\x03\x05\v"},
+       {"crypto/internal/entropy", "F"},
+       {"crypto/internal/fips140", "?/\x15\xa7\x01\v\x16"},
+       {"crypto/internal/fips140/aes", "\x03\x1d\x03\x02\x13\x05\x01\x01\x05*\x92\x014"},
+       {"crypto/internal/fips140/aes/gcm", " \x01\x02\x02\x02\x11\x05\x01\x06*\x8f\x01"},
+       {"crypto/internal/fips140/alias", "\xcb\x02"},
+       {"crypto/internal/fips140/bigmod", "%\x18\x01\x06*\x92\x01"},
+       {"crypto/internal/fips140/check", " \x0e\x06\t\x02\xb2\x01Z"},
+       {"crypto/internal/fips140/check/checktest", "%\x85\x02!"},
+       {"crypto/internal/fips140/drbg", "\x03\x1c\x01\x01\x04\x13\x05\b\x01(\x83\x01\x0f7"},
+       {"crypto/internal/fips140/ecdh", "\x03\x1d\x05\x02\t\r1\x83\x01\x0f7"},
+       {"crypto/internal/fips140/ecdsa", "\x03\x1d\x04\x01\x02\a\x02\x068\x15nF"},
+       {"crypto/internal/fips140/ed25519", "\x03\x1d\x05\x02\x04\v8\xc6\x01\x03"},
+       {"crypto/internal/fips140/edwards25519", "%\a\f\x051\x92\x017"},
+       {"crypto/internal/fips140/edwards25519/field", "%\x13\x051\x92\x01"},
+       {"crypto/internal/fips140/hkdf", "\x03\x1d\x05\t\x06:\x15"},
+       {"crypto/internal/fips140/hmac", "\x03\x1d\x14\x01\x018\x15"},
+       {"crypto/internal/fips140/mlkem", "\x03\x1d\x05\x02\x0e\x03\x051"},
+       {"crypto/internal/fips140/nistec", "%\f\a\x051\x92\x01*\r\x14"},
+       {"crypto/internal/fips140/nistec/fiat", "%\x136\x92\x01"},
+       {"crypto/internal/fips140/pbkdf2", "\x03\x1d\x05\t\x06:\x15"},
+       {"crypto/internal/fips140/rsa", "\x03\x1d\x04\x01\x02\r\x01\x01\x026\x15nF"},
+       {"crypto/internal/fips140/sha256", "\x03\x1d\x1d\x01\x06*\x15}"},
+       {"crypto/internal/fips140/sha3", "\x03\x1d\x18\x05\x010\x92\x01K"},
+       {"crypto/internal/fips140/sha512", "\x03\x1d\x1d\x01\x06*\x15}"},
+       {"crypto/internal/fips140/ssh", "%^"},
+       {"crypto/internal/fips140/subtle", "#\x1a\xc3\x01"},
+       {"crypto/internal/fips140/tls12", "\x03\x1d\x05\t\x06\x028\x15"},
+       {"crypto/internal/fips140/tls13", "\x03\x1d\x05\b\a\t1\x15"},
+       {"crypto/internal/fips140cache", "\xaa\x02\r&"},
        {"crypto/internal/fips140deps", ""},
        {"crypto/internal/fips140deps/byteorder", "\x99\x01"},
-       {"crypto/internal/fips140deps/cpu", "\xad\x01\a"},
-       {"crypto/internal/fips140deps/godebug", "\xb5\x01"},
-       {"crypto/internal/fips140hash", "5\x1a4\xc2\x01"},
-       {"crypto/internal/fips140only", "'\r\x01\x01M25"},
+       {"crypto/internal/fips140deps/cpu", "\xae\x01\a"},
+       {"crypto/internal/fips140deps/godebug", "\xb6\x01"},
+       {"crypto/internal/fips140hash", "5\x1b3\xc8\x01"},
+       {"crypto/internal/fips140only", "'\r\x01\x01M3;"},
        {"crypto/internal/fips140test", ""},
-       {"crypto/internal/hpke", "\x0e\x01\x01\x03\x1a\x1d#,`N"},
-       {"crypto/internal/impl", "\xb0\x02"},
-       {"crypto/internal/randutil", "\xea\x01\x12"},
-       {"crypto/internal/sysrand", "mi!\x1f\r\x0f\x01\x01\v\x06"},
-       {"crypto/internal/sysrand/internal/seccomp", "m"},
-       {"crypto/md5", "\x0e2-\x16\x16`"},
+       {"crypto/internal/hpke", "\x0e\x01\x01\x03\x053#+gM"},
+       {"crypto/internal/impl", "\xb5\x02"},
+       {"crypto/internal/randutil", "\xf1\x01\x12"},
+       {"crypto/internal/sysrand", "nn! \r\r\x01\x01\f\x06"},
+       {"crypto/internal/sysrand/internal/seccomp", "n"},
+       {"crypto/md5", "\x0e3-\x15\x16g"},
        {"crypto/mlkem", "/"},
-       {"crypto/pbkdf2", "2\r\x01-\x16"},
-       {"crypto/rand", "\x1a\x06\a\x19\x04\x01(}\x0eM"},
-       {"crypto/rc4", "#\x1d-\xc2\x01"},
-       {"crypto/rsa", "\x0e\f\x01\t\x0f\f\x01\x04\x06\a\x1c\x03\x1325\r\x01"},
-       {"crypto/sha1", "\x0e\f&-\x16\x16\x14L"},
+       {"crypto/pbkdf2", "2\x0e\x01-\x15"},
+       {"crypto/rand", "\x1a\x06\a\x1a\x04\x01(\x83\x01\rM"},
+       {"crypto/rc4", "#\x1e-\xc6\x01"},
+       {"crypto/rsa", "\x0e\f\x01\t\x0f\r\x01\x04\x06\a\x1c\x03\x123;\f\x01"},
+       {"crypto/sha1", "\x0e\f'\x03*\x15\x16\x15R"},
        {"crypto/sha256", "\x0e\f\x1aO"},
-       {"crypto/sha3", "\x0e'N\xc2\x01"},
+       {"crypto/sha3", "\x0e'N\xc8\x01"},
        {"crypto/sha512", "\x0e\f\x1cM"},
-       {"crypto/subtle", "8\x96\x01U"},
-       {"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x03\x01\a\x01\v\x02\n\x01\b\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x13\x16\x14\b5\x16\x16\r\n\x01\x01\x01\x02\x01\f\x06\x02\x01"},
-       {"crypto/tls/internal/fips140tls", " \x93\x02"},
-       {"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x011\x03\x02\x01\x01\x02\x05\x0e\x06\x02\x02\x03E\x032\x01\x02\t\x01\x01\x01\a\x10\x05\x01\x06\x02\x05\f\x01\x02\r\x02\x01\x01\x02\x03\x01"},
-       {"crypto/x509/pkix", "c\x06\a\x88\x01G"},
-       {"database/sql", "\x03\nJ\x16\x03z\f\x06\"\x05\n\x02\x03\x01\f\x02\x02\x02"},
-       {"database/sql/driver", "\r`\x03\xae\x01\x11\x10"},
-       {"debug/buildinfo", "\x03W\x02\x01\x01\b\a\x03`\x18\x02\x01+\x0f "},
-       {"debug/dwarf", "\x03c\a\x03z1\x13\x01\x01"},
-       {"debug/elf", "\x03\x06P\r\a\x03`\x19\x01,\x19\x01\x15"},
-       {"debug/gosym", "\x03c\n\xbe\x01\x01\x01\x02"},
-       {"debug/macho", "\x03\x06P\r\n`\x1a,\x19\x01"},
-       {"debug/pe", "\x03\x06P\r\a\x03`\x1a,\x19\x01\x15"},
-       {"debug/plan9obj", "f\a\x03`\x1a,"},
-       {"embed", "m+:\x18\x01T"},
+       {"crypto/subtle", "8\x9b\x01W"},
+       {"crypto/tls", "\x03\b\x02\x01\x01\x01\x01\x02\x01\x01\x01\x02\x01\x01\a\x01\r\n\x01\t\x05\x03\x01\x01\x01\x01\x02\x01\x02\x01\x17\x02\x03\x12\x16\x15\b;\x16\x16\r\b\x01\x01\x01\x02\x01\r\x06\x02\x01\x0f"},
+       {"crypto/tls/internal/fips140tls", "\x17\xa1\x02"},
+       {"crypto/x509", "\x03\v\x01\x01\x01\x01\x01\x01\x01\x012\x05\x01\x01\x02\x05\x0e\x06\x02\x02\x03E\x038\x01\x02\b\x01\x01\x02\a\x10\x05\x01\x06\x02\x05\n\x01\x02\x0e\x02\x01\x01\x02\x03\x01"},
+       {"crypto/x509/pkix", "d\x06\a\x8d\x01G"},
+       {"database/sql", "\x03\nK\x16\x03\x80\x01\v\a\"\x05\b\x02\x03\x01\r\x02\x02\x02"},
+       {"database/sql/driver", "\ra\x03\xb4\x01\x0f\x11"},
+       {"debug/buildinfo", "\x03X\x02\x01\x01\b\a\x03e\x19\x02\x01+\x0f\x1f"},
+       {"debug/dwarf", "\x03d\a\x03\x80\x011\x11\x01\x01"},
+       {"debug/elf", "\x03\x06Q\r\a\x03e\x1a\x01,\x17\x01\x16"},
+       {"debug/gosym", "\x03d\n\xc2\x01\x01\x01\x02"},
+       {"debug/macho", "\x03\x06Q\r\ne\x1b,\x17\x01"},
+       {"debug/pe", "\x03\x06Q\r\a\x03e\x1b,\x17\x01\x16"},
+       {"debug/plan9obj", "g\a\x03e\x1b,"},
+       {"embed", "n*@\x19\x01S"},
        {"embed/internal/embedtest", ""},
        {"encoding", ""},
-       {"encoding/ascii85", "\xea\x01E"},
-       {"encoding/asn1", "\x03j\x03\x87\x01\x01&\x0f\x02\x01\x0f\x03\x01"},
-       {"encoding/base32", "\xea\x01C\x02"},
-       {"encoding/base64", "\x99\x01QC\x02"},
-       {"encoding/binary", "m}\r'\x0f\x05"},
-       {"encoding/csv", "\x02\x01j\x03zF\x11\x02"},
-       {"encoding/gob", "\x02_\x05\a\x03`\x1a\f\x01\x02\x1d\b\x14\x01\x0e\x02"},
-       {"encoding/hex", "m\x03zC\x03"},
-       {"encoding/json", "\x03\x01]\x04\b\x03z\r'\x0f\x02\x01\x02\x0f\x01\x01\x02"},
-       {"encoding/pem", "\x03b\b}C\x03"},
-       {"encoding/xml", "\x02\x01^\f\x03z4\x05\f\x01\x02\x0f\x02"},
-       {"errors", "\xc9\x01|"},
-       {"expvar", "jK9\t\n\x15\r\n\x02\x03\x01\x10"},
-       {"flag", "a\f\x03z,\b\x05\n\x02\x01\x0f"},
-       {"fmt", "mE8\r\x1f\b\x0f\x02\x03\x11"},
-       {"go/ast", "\x03\x01l\x0f\x01j\x03)\b\x0f\x02\x01"},
-       {"go/ast/internal/tests", ""},
-       {"go/build", "\x02\x01j\x03\x01\x03\x02\a\x02\x01\x17\x1e\x04\x02\t\x14\x12\x01+\x01\x04\x01\a\n\x02\x01\x11\x02\x02"},
-       {"go/build/constraint", "m\xc2\x01\x01\x11\x02"},
-       {"go/constant", "p\x10w\x01\x016\x01\x02\x11"},
-       {"go/doc", "\x04l\x01\x06\t=-1\x12\x02\x01\x11\x02"},
-       {"go/doc/comment", "\x03m\xbd\x01\x01\x01\x01\x11\x02"},
-       {"go/format", "\x03m\x01\f\x01\x02jF"},
-       {"go/importer", "s\a\x01\x01\x04\x01i9"},
-       {"go/internal/gccgoimporter", "\x02\x01W\x13\x03\x05\v\x01g\x02,\x01\x05\x13\x01\v\b"},
-       {"go/internal/gcimporter", "\x02n\x10\x01/\x05\x0e',\x17\x03\x02"},
-       {"go/internal/srcimporter", "p\x01\x02\n\x03\x01i,\x01\x05\x14\x02\x13"},
-       {"go/parser", "\x03j\x03\x01\x03\v\x01j\x01+\x06\x14"},
-       {"go/printer", "p\x01\x03\x03\tj\r\x1f\x17\x02\x01\x02\n\x05\x02"},
-       {"go/scanner", "\x03m\x10j2\x12\x01\x12\x02"},
-       {"go/token", "\x04l\xbd\x01\x02\x03\x01\x0e\x02"},
-       {"go/types", "\x03\x01\x06c\x03\x01\x04\b\x03\x02\x15\x1e\x06+\x04\x03\n%\a\n\x01\x01\x01\x02\x01\x0e\x02\x02"},
-       {"go/version", "\xba\x01v"},
-       {"hash", "\xea\x01"},
-       {"hash/adler32", "m\x16\x16"},
-       {"hash/crc32", "m\x16\x16\x14\x85\x01\x01\x12"},
-       {"hash/crc64", "m\x16\x16\x99\x01"},
-       {"hash/fnv", "m\x16\x16`"},
-       {"hash/maphash", "\x94\x01\x05\x1b\x03@N"},
-       {"html", "\xb0\x02\x02\x11"},
-       {"html/template", "\x03g\x06\x19,5\x01\v \x05\x01\x02\x03\x0e\x01\x02\v\x01\x03\x02"},
-       {"image", "\x02k\x1f^\x0f6\x03\x01"},
+       {"encoding/ascii85", "\xf1\x01C"},
+       {"encoding/asn1", "\x03k\x03\x8c\x01\x01'\r\x02\x01\x10\x03\x01"},
+       {"encoding/base32", "\xf1\x01A\x02"},
+       {"encoding/base64", "\x99\x01XA\x02"},
+       {"encoding/binary", "n\x83\x01\f(\r\x05"},
+       {"encoding/csv", "\x02\x01k\x03\x80\x01D\x12\x02"},
+       {"encoding/gob", "\x02`\x05\a\x03e\x1b\v\x01\x03\x1d\b\x12\x01\x0f\x02"},
+       {"encoding/hex", "n\x03\x80\x01A\x03"},
+       {"encoding/json", "\x03\x01^\x04\b\x03\x80\x01\f(\r\x02\x01\x02\x10\x01\x01\x02"},
+       {"encoding/pem", "\x03c\b\x83\x01A\x03"},
+       {"encoding/xml", "\x02\x01_\f\x03\x80\x014\x05\n\x01\x02\x10\x02"},
+       {"errors", "\xca\x01\x81\x01"},
+       {"expvar", "kK?\b\v\x15\r\b\x02\x03\x01\x11"},
+       {"flag", "b\f\x03\x80\x01,\b\x05\b\x02\x01\x10"},
+       {"fmt", "nE>\f \b\r\x02\x03\x12"},
+       {"go/ast", "\x03\x01m\x0e\x01q\x03)\b\r\x02\x01"},
+       {"go/build", "\x02\x01k\x03\x01\x02\x02\a\x02\x01\x17\x1f\x04\x02\t\x19\x13\x01+\x01\x04\x01\a\b\x02\x01\x12\x02\x02"},
+       {"go/build/constraint", "n\xc6\x01\x01\x12\x02"},
+       {"go/constant", "q\x0f}\x01\x024\x01\x02\x12"},
+       {"go/doc", "\x04m\x01\x05\t>31\x10\x02\x01\x12\x02"},
+       {"go/doc/comment", "\x03n\xc1\x01\x01\x01\x01\x12\x02"},
+       {"go/format", "\x03n\x01\v\x01\x02qD"},
+       {"go/importer", "s\a\x01\x01\x04\x01p9"},
+       {"go/internal/gccgoimporter", "\x02\x01X\x13\x03\x04\v\x01n\x02,\x01\x05\x11\x01\f\b"},
+       {"go/internal/gcimporter", "\x02o\x0f\x010\x05\x0e-,\x15\x03\x02"},
+       {"go/internal/srcimporter", "q\x01\x01\n\x03\x01p,\x01\x05\x12\x02\x14"},
+       {"go/parser", "\x03k\x03\x01\x02\v\x01q\x01+\x06\x12"},
+       {"go/printer", "q\x01\x02\x03\tq\f \x15\x02\x01\x02\v\x05\x02"},
+       {"go/scanner", "\x03n\x0fq2\x10\x01\x13\x02"},
+       {"go/token", "\x04m\x83\x01>\x02\x03\x01\x0f\x02"},
+       {"go/types", "\x03\x01\x06d\x03\x01\x03\b\x03\x02\x15\x1f\x061\x04\x03\t \x06\a\b\x01\x01\x01\x02\x01\x0f\x02\x02"},
+       {"go/version", "\xbb\x01z"},
+       {"hash", "\xf1\x01"},
+       {"hash/adler32", "n\x15\x16"},
+       {"hash/crc32", "n\x15\x16\x15\x89\x01\x01\x13"},
+       {"hash/crc64", "n\x15\x16\x9e\x01"},
+       {"hash/fnv", "n\x15\x16g"},
+       {"hash/maphash", "\x83\x01\x11!\x03\x93\x01"},
+       {"html", "\xb5\x02\x02\x12"},
+       {"html/template", "\x03h\x06\x18-;\x01\n!\x05\x01\x02\x03\f\x01\x02\f\x01\x03\x02"},
+       {"image", "\x02l\x1ee\x0f4\x03\x01"},
        {"image/color", ""},
        {"image/color/palette", "\x8c\x01"},
        {"image/draw", "\x8b\x01\x01\x04"},
-       {"image/gif", "\x02\x01\x05e\x03\x1b\x01\x01\x01\vQ"},
+       {"image/gif", "\x02\x01\x05f\x03\x1a\x01\x01\x01\vX"},
        {"image/internal/imageutil", "\x8b\x01"},
-       {"image/jpeg", "\x02k\x1e\x01\x04Z"},
-       {"image/png", "\x02\a]\n\x13\x02\x06\x01^E"},
-       {"index/suffixarray", "\x03c\a}\r*\f\x01"},
-       {"internal/abi", "\xb4\x01\x91\x01"},
-       {"internal/asan", "\xc5\x02"},
-       {"internal/bisect", "\xa3\x02\x0f\x01"},
-       {"internal/buildcfg", "pG_\x06\x02\x05\f\x01"},
-       {"internal/bytealg", "\xad\x01\x98\x01"},
+       {"image/jpeg", "\x02l\x1d\x01\x04a"},
+       {"image/png", "\x02\a^\n\x12\x02\x06\x01eC"},
+       {"index/suffixarray", "\x03d\a\x83\x01\f+\n\x01"},
+       {"internal/abi", "\xb5\x01\x96\x01"},
+       {"internal/asan", "\xcb\x02"},
+       {"internal/bisect", "\xaa\x02\r\x01"},
+       {"internal/buildcfg", "qGe\x06\x02\x05\n\x01"},
+       {"internal/bytealg", "\xae\x01\x9d\x01"},
        {"internal/byteorder", ""},
        {"internal/cfg", ""},
-       {"internal/chacha8rand", "\x99\x01\x1b\x91\x01"},
+       {"internal/cgrouptest", "q[Q\x06\x0f\x02\x01\x04\x01"},
+       {"internal/chacha8rand", "\x99\x01\x15\a\x96\x01"},
        {"internal/copyright", ""},
        {"internal/coverage", ""},
        {"internal/coverage/calloc", ""},
-       {"internal/coverage/cfile", "j\x06\x17\x16\x01\x02\x01\x01\x01\x01\x01\x01\x01#\x01\x1f,\x06\a\f\x01\x03\f\x06"},
-       {"internal/coverage/cformat", "\x04l-\x04I\f7\x01\x02\f"},
-       {"internal/coverage/cmerge", "p-Z"},
-       {"internal/coverage/decodecounter", "f\n-\v\x02@,\x19\x16"},
-       {"internal/coverage/decodemeta", "\x02d\n\x17\x16\v\x02@,"},
-       {"internal/coverage/encodecounter", "\x02d\n-\f\x01\x02>\f \x17"},
-       {"internal/coverage/encodemeta", "\x02\x01c\n\x13\x04\x16\r\x02>,/"},
-       {"internal/coverage/pods", "\x04l-y\x06\x05\f\x02\x01"},
-       {"internal/coverage/rtcov", "\xc5\x02"},
-       {"internal/coverage/slicereader", "f\nz["},
-       {"internal/coverage/slicewriter", "pz"},
-       {"internal/coverage/stringtab", "p8\x04>"},
+       {"internal/coverage/cfile", "k\x06\x16\x17\x01\x02\x01\x01\x01\x01\x01\x01\x01#\x02$,\x06\a\n\x01\x03\r\x06"},
+       {"internal/coverage/cformat", "\x04m-\x04O\v6\x01\x02\r"},
+       {"internal/coverage/cmerge", "q-_"},
+       {"internal/coverage/decodecounter", "g\n-\v\x02F,\x17\x17"},
+       {"internal/coverage/decodemeta", "\x02e\n\x16\x17\v\x02F,"},
+       {"internal/coverage/encodecounter", "\x02e\n-\f\x01\x02D\v!\x15"},
+       {"internal/coverage/encodemeta", "\x02\x01d\n\x12\x04\x17\r\x02D,."},
+       {"internal/coverage/pods", "\x04m-\x7f\x06\x05\n\x02\x01"},
+       {"internal/coverage/rtcov", "\xcb\x02"},
+       {"internal/coverage/slicereader", "g\n\x80\x01Z"},
+       {"internal/coverage/slicewriter", "q\x80\x01"},
+       {"internal/coverage/stringtab", "q8\x04D"},
        {"internal/coverage/test", ""},
        {"internal/coverage/uleb128", ""},
-       {"internal/cpu", "\xc5\x02"},
-       {"internal/dag", "\x04l\xbd\x01\x03"},
-       {"internal/diff", "\x03m\xbe\x01\x02"},
-       {"internal/exportdata", "\x02\x01j\x03\x03]\x1a,\x01\x05\x13\x01\x02"},
-       {"internal/filepathlite", "m+:\x19B"},
-       {"internal/fmtsort", "\x04\x9a\x02\x0f"},
-       {"internal/fuzz", "\x03\nA\x18\x04\x03\x03\x01\f\x0355\r\x02\x1d\x01\x05\x02\x05\f\x01\x02\x01\x01\v\x04\x02"},
+       {"internal/cpu", "\xcb\x02"},
+       {"internal/dag", "\x04m\xc1\x01\x03"},
+       {"internal/diff", "\x03n\xc2\x01\x02"},
+       {"internal/exportdata", "\x02\x01k\x03\x02c\x1b,\x01\x05\x11\x01\x02"},
+       {"internal/filepathlite", "n*@\x1a@"},
+       {"internal/fmtsort", "\x04\xa1\x02\r"},
+       {"internal/fuzz", "\x03\nB\x18\x04\x03\x03\x01\v\x036;\f\x03\x1d\x01\x05\x02\x05\n\x01\x02\x01\x01\f\x04\x02"},
        {"internal/goarch", ""},
-       {"internal/godebug", "\x96\x01 |\x01\x12"},
+       {"internal/godebug", "\x96\x01!\x80\x01\x01\x13"},
        {"internal/godebugs", ""},
        {"internal/goexperiment", ""},
        {"internal/goos", ""},
-       {"internal/goroot", "\x96\x02\x01\x05\x14\x02"},
+       {"internal/goroot", "\x9d\x02\x01\x05\x12\x02"},
        {"internal/gover", "\x04"},
        {"internal/goversion", ""},
        {"internal/itoa", ""},
-       {"internal/lazyregexp", "\x96\x02\v\x0f\x02"},
-       {"internal/lazytemplate", "\xea\x01,\x1a\x02\v"},
-       {"internal/msan", "\xc5\x02"},
+       {"internal/lazyregexp", "\x9d\x02\v\r\x02"},
+       {"internal/lazytemplate", "\xf1\x01,\x18\x02\f"},
+       {"internal/msan", "\xcb\x02"},
        {"internal/nettrace", ""},
-       {"internal/obscuretestdata", "e\x85\x01,"},
-       {"internal/oserror", "m"},
-       {"internal/pkgbits", "\x03K\x18\a\x03\x05\vj\x0e\x1e\r\f\x01"},
+       {"internal/obscuretestdata", "f\x8b\x01,"},
+       {"internal/oserror", "n"},
+       {"internal/pkgbits", "\x03L\x18\a\x03\x04\vq\r\x1f\r\n\x01"},
        {"internal/platform", ""},
-       {"internal/poll", "mO\x1a\x149\x0f\x01\x01\v\x06"},
-       {"internal/profile", "\x03\x04f\x03z7\r\x01\x01\x0f"},
+       {"internal/poll", "nO\x1f\x159\r\x01\x01\f\x06"},
+       {"internal/profile", "\x03\x04g\x03\x80\x017\v\x01\x01\x10"},
        {"internal/profilerecord", ""},
-       {"internal/race", "\x94\x01\xb1\x01"},
-       {"internal/reflectlite", "\x94\x01 3<\""},
-       {"internal/runtime/atomic", "\xc5\x02"},
-       {"internal/runtime/exithook", "\xca\x01{"},
-       {"internal/runtime/maps", "\x94\x01\x01\x1f\v\t\x05\x01w"},
-       {"internal/runtime/math", "\xb4\x01"},
-       {"internal/runtime/sys", "\xb4\x01\x04"},
-       {"internal/runtime/syscall", "\xc5\x02"},
-       {"internal/saferio", "\xea\x01["},
-       {"internal/singleflight", "\xb2\x02"},
-       {"internal/stringslite", "\x98\x01\xad\x01"},
-       {"internal/sync", "\x94\x01 \x14k\x12"},
-       {"internal/synctest", "\xc5\x02"},
-       {"internal/syscall/execenv", "\xb4\x02"},
-       {"internal/syscall/unix", "\xa3\x02\x10\x01\x11"},
-       {"internal/sysinfo", "\x02\x01\xaa\x01=,\x1a\x02"},
+       {"internal/race", "\x94\x01\xb7\x01"},
+       {"internal/reflectlite", "\x94\x01!9<!"},
+       {"internal/runtime/atomic", "\xb5\x01\x96\x01"},
+       {"internal/runtime/cgroup", "\x98\x01:\x02w"},
+       {"internal/runtime/exithook", "\xcb\x01\x80\x01"},
+       {"internal/runtime/gc", "\xb5\x01"},
+       {"internal/runtime/maps", "\x94\x01\x01 \v\t\a\x03x"},
+       {"internal/runtime/math", "\xb5\x01"},
+       {"internal/runtime/startlinetest", ""},
+       {"internal/runtime/strconv", "\xd0\x01"},
+       {"internal/runtime/sys", "\xb5\x01\x04"},
+       {"internal/runtime/syscall", "\xb5\x01\x96\x01"},
+       {"internal/runtime/wasitest", ""},
+       {"internal/saferio", "\xf1\x01Z"},
+       {"internal/singleflight", "\xb7\x02"},
+       {"internal/stringslite", "\x98\x01\xb3\x01"},
+       {"internal/sync", "\x94\x01!\x14o\x13"},
+       {"internal/synctest", "\x94\x01\xb7\x01"},
+       {"internal/syscall/execenv", "\xb9\x02"},
+       {"internal/syscall/unix", "\xaa\x02\x0e\x01\x12"},
+       {"internal/sysinfo", "\x02\x01\xab\x01C,\x18\x02"},
        {"internal/syslist", ""},
-       {"internal/testenv", "\x03\n`\x02\x01*\x1a\x10'+\x01\x05\a\f\x01\x02\x02\x01\n"},
-       {"internal/testlog", "\xb2\x02\x01\x12"},
-       {"internal/testpty", "m\x03\xa6\x01"},
-       {"internal/trace", "\x02\x01\x01\x06\\\a\x03n\x03\x03\x06\x03\n6\x01\x02\x0f\x06"},
-       {"internal/trace/internal/testgen", "\x03c\nl\x03\x02\x03\x011\v\x0f"},
-       {"internal/trace/internal/tracev1", "\x03\x01b\a\x03t\x06\r6\x01"},
-       {"internal/trace/raw", "\x02d\nq\x03\x06E\x01\x11"},
-       {"internal/trace/testtrace", "\x02\x01j\x03l\x03\x06\x057\f\x02\x01"},
+       {"internal/testenv", "\x03\na\x02\x01)\x1b\x10-+\x01\x05\a\n\x01\x02\x02\x01\v"},
+       {"internal/testhash", "\x03\x80\x01n\x118\v"},
+       {"internal/testlog", "\xb7\x02\x01\x13"},
+       {"internal/testpty", "n\x03\xac\x01"},
+       {"internal/trace", "\x02\x01\x01\x06]\a\x03t\x03\x03\x06\x03\t5\x01\x01\x01\x10\x06"},
+       {"internal/trace/internal/testgen", "\x03d\nr\x03\x02\x03\x011\v\r\x10"},
+       {"internal/trace/internal/tracev1", "\x03\x01c\a\x03z\x06\f5\x01"},
+       {"internal/trace/raw", "\x02e\nw\x03\x06C\x01\x12"},
+       {"internal/trace/testtrace", "\x02\x01k\x03r\x03\x05\x01\x057\n\x02\x01"},
        {"internal/trace/tracev2", ""},
-       {"internal/trace/traceviewer", "\x02]\v\x06\x1a<\x16\a\a\x04\t\n\x15\x01\x05\a\f\x01\x02\r"},
+       {"internal/trace/traceviewer", "\x02^\v\x06\x19=\x1c\a\a\x04\b\v\x15\x01\x05\a\n\x01\x02\x0e"},
        {"internal/trace/traceviewer/format", ""},
-       {"internal/trace/version", "pq\t"},
-       {"internal/txtar", "\x03m\xa6\x01\x1a"},
-       {"internal/types/errors", "\xaf\x02"},
-       {"internal/unsafeheader", "\xc5\x02"},
-       {"internal/xcoff", "Y\r\a\x03`\x1a,\x19\x01"},
-       {"internal/zstd", "f\a\x03z\x0f"},
-       {"io", "m\xc5\x01"},
-       {"io/fs", "m+*(1\x12\x12\x04"},
-       {"io/ioutil", "\xea\x01\x01+\x17\x03"},
-       {"iter", "\xc8\x01[\""},
-       {"log", "pz\x05'\r\x0f\x01\f"},
+       {"internal/trace/version", "qw\t"},
+       {"internal/txtar", "\x03n\xac\x01\x18"},
+       {"internal/types/errors", "\xb4\x02"},
+       {"internal/unsafeheader", "\xcb\x02"},
+       {"internal/xcoff", "Z\r\a\x03e\x1b,\x17\x01"},
+       {"internal/zstd", "g\a\x03\x80\x01\x0f"},
+       {"io", "n\xc9\x01"},
+       {"io/fs", "n*+.1\x10\x13\x04"},
+       {"io/ioutil", "\xf1\x01\x01+\x15\x03"},
+       {"iter", "\xc9\x01a!"},
+       {"log", "q\x80\x01\x05'\r\r\x01\r"},
        {"log/internal", ""},
-       {"log/slog", "\x03\nT\t\x03\x03z\x04\x01\x02\x02\x04'\x05\n\x02\x01\x02\x01\f\x02\x02\x02"},
+       {"log/slog", "\x03\nU\t\x03\x03\x80\x01\x04\x01\x02\x02\x03(\x05\b\x02\x01\x02\x01\r\x02\x02\x02"},
        {"log/slog/internal", ""},
-       {"log/slog/internal/benchmarks", "\r`\x03z\x06\x03<\x10"},
-       {"log/slog/internal/buffer", "\xb2\x02"},
-       {"log/slog/internal/slogtest", "\xf0\x01"},
-       {"log/syslog", "m\x03~\x12\x16\x1a\x02\r"},
-       {"maps", "\xed\x01X"},
-       {"math", "\xad\x01LL"},
-       {"math/big", "\x03j\x03)\x14=\r\x02\x024\x01\x02\x13"},
-       {"math/bits", "\xc5\x02"},
-       {"math/cmplx", "\xf7\x01\x02"},
-       {"math/rand", "\xb5\x01B;\x01\x12"},
-       {"math/rand/v2", "m,\x02\\\x02L"},
-       {"mime", "\x02\x01b\b\x03z\f \x17\x03\x02\x0f\x02"},
-       {"mime/multipart", "\x02\x01G#\x03E5\f\x01\x06\x02\x15\x02\x06\x11\x02\x01\x15"},
-       {"mime/quotedprintable", "\x02\x01mz"},
-       {"net", "\x04\t`+\x1d\a\x04\x05\f\x01\x04\x14\x01%\x06\r\n\x05\x01\x01\v\x06\a"},
-       {"net/http", "\x02\x01\x04\x04\x02=\b\x13\x01\a\x03E5\x01\x03\b\x01\x02\x02\x02\x01\x02\x06\x02\x01\x01\n\x01\x01\x05\x01\x02\x05\n\x01\x01\x01\x02\x01\x01\v\x02\x02\x02\b\x01\x01\x01"},
-       {"net/http/cgi", "\x02P\x1b\x03z\x04\b\n\x01\x13\x01\x01\x01\x04\x01\x05\x02\n\x02\x01\x0f\x0e"},
-       {"net/http/cookiejar", "\x04i\x03\x90\x01\x01\b\f\x18\x03\x02\r\x04"},
-       {"net/http/fcgi", "\x02\x01\nY\a\x03z\x16\x01\x01\x14\x1a\x02\r"},
-       {"net/http/httptest", "\x02\x01\nE\x02\x1b\x01z\x04\x12\x01\n\t\x02\x19\x01\x02\r\x0e"},
-       {"net/http/httptrace", "\rEn@\x14\n!"},
-       {"net/http/httputil", "\x02\x01\n`\x03z\x04\x0f\x03\x01\x05\x02\x01\v\x01\x1b\x02\r\x0e"},
-       {"net/http/internal", "\x02\x01j\x03z"},
-       {"net/http/internal/ascii", "\xb0\x02\x11"},
-       {"net/http/internal/httpcommon", "\r`\x03\x96\x01\x0e\x01\x19\x01\x01\x02\x1b\x02"},
-       {"net/http/internal/testcert", "\xb0\x02"},
-       {"net/http/pprof", "\x02\x01\nc\x19,\x11$\x04\x13\x14\x01\r\x06\x03\x01\x02\x01\x0f"},
+       {"log/slog/internal/benchmarks", "\ra\x03\x80\x01\x06\x03:\x11"},
+       {"log/slog/internal/buffer", "\xb7\x02"},
+       {"log/syslog", "n\x03\x84\x01\x12\x16\x18\x02\x0e"},
+       {"maps", "\xf4\x01W"},
+       {"math", "\xae\x01RK"},
+       {"math/big", "\x03k\x03(\x15C\f\x03\x020\x02\x01\x02\x14"},
+       {"math/big/internal/asmgen", "\x03\x01m\x8f\x012\x03"},
+       {"math/bits", "\xcb\x02"},
+       {"math/cmplx", "\xfd\x01\x03"},
+       {"math/rand", "\xb6\x01G:\x01\x13"},
+       {"math/rand/v2", "n+\x03a\x03K"},
+       {"mime", "\x02\x01c\b\x03\x80\x01\v!\x15\x03\x02\x10\x02"},
+       {"mime/multipart", "\x02\x01H#\x03E;\v\x01\a\x02\x15\x02\x06\x0f\x02\x01\x16"},
+       {"mime/quotedprintable", "\x02\x01n\x80\x01"},
+       {"net", "\x04\ta*\x1e\a\x04\x05\x11\x01\x04\x15\x01%\x06\r\b\x05\x01\x01\f\x06\a"},
+       {"net/http", "\x02\x01\x04\x04\x02>\b\x13\x01\a\x03E;\x01\x03\a\x01\x03\x02\x02\x01\x02\x06\x02\x01\x01\n\x01\x01\x05\x01\x02\x05\b\x01\x01\x01\x02\x01\r\x02\x02\x02\b\x01\x01\x01"},
+       {"net/http/cgi", "\x02Q\x1b\x03\x80\x01\x04\a\v\x01\x13\x01\x01\x01\x04\x01\x05\x02\b\x02\x01\x10\x0e"},
+       {"net/http/cookiejar", "\x04j\x03\x96\x01\x01\b\f\x16\x03\x02\x0e\x04"},
+       {"net/http/fcgi", "\x02\x01\nZ\a\x03\x80\x01\x16\x01\x01\x14\x18\x02\x0e"},
+       {"net/http/httptest", "\x02\x01\nF\x02\x1b\x01\x80\x01\x04\x12\x01\n\t\x02\x17\x01\x02\x0e\x0e"},
+       {"net/http/httptrace", "\rFnF\x14\n "},
+       {"net/http/httputil", "\x02\x01\na\x03\x80\x01\x04\x0f\x03\x01\x05\x02\x01\v\x01\x19\x02\x0e\x0e"},
+       {"net/http/internal", "\x02\x01k\x03\x80\x01"},
+       {"net/http/internal/ascii", "\xb5\x02\x12"},
+       {"net/http/internal/httpcommon", "\ra\x03\x9c\x01\x0e\x01\x17\x01\x01\x02\x1c\x02"},
+       {"net/http/internal/testcert", "\xb5\x02"},
+       {"net/http/pprof", "\x02\x01\nd\x18-\x11*\x04\x13\x14\x01\r\x04\x03\x01\x02\x01\x10"},
        {"net/internal/cgotest", ""},
-       {"net/internal/socktest", "p\xc2\x01\x02"},
-       {"net/mail", "\x02k\x03z\x04\x0f\x03\x14\x1c\x02\r\x04"},
-       {"net/netip", "\x04i+\x01#;\x026\x15"},
-       {"net/rpc", "\x02f\x05\x03\x10\n`\x04\x12\x01\x1d\x0f\x03\x02"},
-       {"net/rpc/jsonrpc", "j\x03\x03z\x16\x11!"},
-       {"net/smtp", "\x19.\v\x13\b\x03z\x16\x14\x1c"},
-       {"net/textproto", "\x02\x01j\x03z\r\t/\x01\x02\x13"},
-       {"net/url", "m\x03\x86\x01%\x12\x02\x01\x15"},
-       {"os", "m+\x01\x18\x03\b\t\r\x03\x01\x04\x10\x018\n\x05\x01\x01\v\x06"},
-       {"os/exec", "\x03\n`H \x01\x14\x01+\x06\a\f\x01\x04\v"},
-       {"os/exec/internal/fdtest", "\xb4\x02"},
-       {"os/signal", "\r\x89\x02\x17\x05\x02"},
-       {"os/user", "\x02\x01j\x03z,\r\f\x01\x02"},
-       {"path", "m+\xab\x01"},
-       {"path/filepath", "m+\x19:+\r\n\x03\x04\x0f"},
-       {"plugin", "m"},
-       {"reflect", "m'\x04\x1c\b\f\x04\x02\x19\x10,\f\x03\x0f\x02\x02"},
+       {"net/internal/socktest", "q\xc6\x01\x02"},
+       {"net/mail", "\x02l\x03\x80\x01\x04\x0f\x03\x14\x1a\x02\x0e\x04"},
+       {"net/netip", "\x04j*\x01$@\x034\x16"},
+       {"net/rpc", "\x02g\x05\x03\x0f\ng\x04\x12\x01\x1d\r\x03\x02"},
+       {"net/rpc/jsonrpc", "k\x03\x03\x80\x01\x16\x11\x1f"},
+       {"net/smtp", "\x19/\v\x13\b\x03\x80\x01\x16\x14\x1a"},
+       {"net/textproto", "\x02\x01k\x03\x80\x01\f\n-\x01\x02\x14"},
+       {"net/url", "n\x03\x8b\x01&\x10\x02\x01\x16"},
+       {"os", "n*\x01\x19\x03\b\t\x12\x03\x01\x05\x10\x018\b\x05\x01\x01\f\x06"},
+       {"os/exec", "\x03\naH%\x01\x15\x01+\x06\a\n\x01\x04\f"},
+       {"os/exec/internal/fdtest", "\xb9\x02"},
+       {"os/signal", "\r\x90\x02\x15\x05\x02"},
+       {"os/user", "\x02\x01k\x03\x80\x01,\r\n\x01\x02"},
+       {"path", "n*\xb1\x01"},
+       {"path/filepath", "n*\x1a@+\r\b\x03\x04\x10"},
+       {"plugin", "n"},
+       {"reflect", "n&\x04\x1d\b\f\x06\x04\x1b\x06\t-\n\x03\x10\x02\x02"},
        {"reflect/internal/example1", ""},
        {"reflect/internal/example2", ""},
-       {"regexp", "\x03\xe7\x018\v\x02\x01\x02\x0f\x02"},
-       {"regexp/syntax", "\xad\x02\x01\x01\x01\x11\x02"},
-       {"runtime", "\x94\x01\x04\x01\x02\f\x06\a\x02\x01\x01\x0f\x03\x01\x01\x01\x01\x01\x03\x0fd"},
-       {"runtime/coverage", "\x9f\x01K"},
-       {"runtime/debug", "pUQ\r\n\x02\x01\x0f\x06"},
-       {"runtime/internal/startlinetest", ""},
-       {"runtime/internal/wasitest", ""},
-       {"runtime/metrics", "\xb6\x01A,\""},
-       {"runtime/pprof", "\x02\x01\x01\x03\x06Y\a\x03$3#\r\x1f\r\n\x01\x01\x01\x02\x02\b\x03\x06"},
-       {"runtime/race", "\xab\x02"},
+       {"regexp", "\x03\xee\x018\t\x02\x01\x02\x10\x02"},
+       {"regexp/syntax", "\xb2\x02\x01\x01\x01\x02\x10\x02"},
+       {"runtime", "\x94\x01\x04\x01\x03\f\x06\a\x02\x01\x01\x0f\x03\x01\x01\x01\x01\x01\x02\x01\x01\x04\x10c"},
+       {"runtime/coverage", "\xa0\x01Q"},
+       {"runtime/debug", "qUW\r\b\x02\x01\x10\x06"},
+       {"runtime/metrics", "\xb7\x01F-!"},
+       {"runtime/pprof", "\x02\x01\x01\x03\x06Z\a\x03#4)\f \r\b\x01\x01\x01\x02\x02\t\x03\x06"},
+       {"runtime/race", "\xb0\x02"},
        {"runtime/race/internal/amd64v1", ""},
-       {"runtime/trace", "\rcz9\x0f\x01\x12"},
-       {"slices", "\x04\xe9\x01\fL"},
-       {"sort", "\xc9\x0104"},
-       {"strconv", "m+:%\x02J"},
-       {"strings", "m'\x04:\x18\x03\f9\x0f\x02\x02"},
+       {"runtime/trace", "\ra\x03w\t9\b\x05\x01\r\x06"},
+       {"slices", "\x04\xf0\x01\fK"},
+       {"sort", "\xca\x0162"},
+       {"strconv", "n*@%\x03I"},
+       {"strings", "n&\x04@\x19\x03\f7\x10\x02\x02"},
        {"structs", ""},
-       {"sync", "\xc8\x01\vP\x10\x12"},
-       {"sync/atomic", "\xc5\x02"},
-       {"syscall", "m(\x03\x01\x1b\b\x03\x03\x06\aT\n\x05\x01\x12"},
-       {"testing", "\x03\n`\x02\x01X\x0f\x13\r\x04\x1b\x06\x02\x05\x02\a\x01\x02\x01\x02\x01\f\x02\x02\x02"},
-       {"testing/fstest", "m\x03z\x01\v%\x12\x03\b\a"},
-       {"testing/internal/testdeps", "\x02\v\xa6\x01'\x10,\x03\x05\x03\b\a\x02\r"},
-       {"testing/iotest", "\x03j\x03z\x04"},
-       {"testing/quick", "o\x01\x87\x01\x04#\x12\x0f"},
-       {"testing/slogtest", "\r`\x03\x80\x01.\x05\x12\n"},
-       {"text/scanner", "\x03mz,+\x02"},
-       {"text/tabwriter", "pzY"},
-       {"text/template", "m\x03B8\x01\v\x1f\x01\x05\x01\x02\x05\r\x02\f\x03\x02"},
-       {"text/template/parse", "\x03m\xb3\x01\f\x01\x11\x02"},
-       {"time", "m+\x1d\x1d'*\x0f\x02\x11"},
-       {"time/tzdata", "m\xc7\x01\x11"},
+       {"sync", "\xc9\x01\x10\x01P\x0e\x13"},
+       {"sync/atomic", "\xcb\x02"},
+       {"syscall", "n'\x03\x01\x1c\b\x03\x03\x06\vV\b\x05\x01\x13"},
+       {"testing", "\x03\na\x02\x01X\x14\x14\f\x05\x1b\x06\x02\x05\x02\x05\x01\x02\x01\x02\x01\r\x02\x02\x02"},
+       {"testing/fstest", "n\x03\x80\x01\x01\n&\x10\x03\b\b"},
+       {"testing/internal/testdeps", "\x02\v\xa7\x01-\x10,\x03\x05\x03\x06\a\x02\x0e"},
+       {"testing/iotest", "\x03k\x03\x80\x01\x04"},
+       {"testing/quick", "p\x01\x8c\x01\x05#\x10\x10"},
+       {"testing/slogtest", "\ra\x03\x86\x01.\x05\x10\v"},
+       {"testing/synctest", "\xda\x01`\x11"},
+       {"text/scanner", "\x03n\x80\x01,*\x02"},
+       {"text/tabwriter", "q\x80\x01X"},
+       {"text/template", "n\x03B>\x01\n \x01\x05\x01\x02\x05\v\x02\r\x03\x02"},
+       {"text/template/parse", "\x03n\xb9\x01\n\x01\x12\x02"},
+       {"time", "n*\x1e\"(*\r\x02\x12"},
+       {"time/tzdata", "n\xcb\x01\x12"},
        {"unicode", ""},
        {"unicode/utf16", ""},
        {"unicode/utf8", ""},
-       {"unique", "\x94\x01>\x01P\x0f\x13\x12"},
+       {"unique", "\x94\x01!#\x01Q\r\x01\x13\x12"},
        {"unsafe", ""},
-       {"vendor/golang.org/x/crypto/chacha20", "\x10V\a\x8c\x01*'"},
-       {"vendor/golang.org/x/crypto/chacha20poly1305", "\x10V\a\xd9\x01\x04\x01\a"},
-       {"vendor/golang.org/x/crypto/cryptobyte", "c\n\x03\x88\x01&!\n"},
+       {"vendor/golang.org/x/crypto/chacha20", "\x10W\a\x92\x01*&"},
+       {"vendor/golang.org/x/crypto/chacha20poly1305", "\x10W\a\xde\x01\x04\x01\a"},
+       {"vendor/golang.org/x/crypto/cryptobyte", "d\n\x03\x8d\x01' \n"},
        {"vendor/golang.org/x/crypto/cryptobyte/asn1", ""},
-       {"vendor/golang.org/x/crypto/internal/alias", "\xc5\x02"},
-       {"vendor/golang.org/x/crypto/internal/poly1305", "Q\x15\x93\x01"},
-       {"vendor/golang.org/x/net/dns/dnsmessage", "m"},
-       {"vendor/golang.org/x/net/http/httpguts", "\x80\x02\x14\x1c\x13\r"},
-       {"vendor/golang.org/x/net/http/httpproxy", "m\x03\x90\x01\x15\x01\x1a\x13\r"},
-       {"vendor/golang.org/x/net/http2/hpack", "\x03j\x03zH"},
-       {"vendor/golang.org/x/net/idna", "p\x87\x019\x13\x10\x02\x01"},
-       {"vendor/golang.org/x/net/nettest", "\x03c\a\x03z\x11\x05\x16\x01\f\f\x01\x02\x02\x01\n"},
-       {"vendor/golang.org/x/sys/cpu", "\x96\x02\r\f\x01\x15"},
-       {"vendor/golang.org/x/text/secure/bidirule", "m\xd6\x01\x11\x01"},
-       {"vendor/golang.org/x/text/transform", "\x03j}Y"},
-       {"vendor/golang.org/x/text/unicode/bidi", "\x03\be~@\x15"},
-       {"vendor/golang.org/x/text/unicode/norm", "f\nzH\x11\x11"},
-       {"weak", "\x94\x01\x8f\x01\""},
+       {"vendor/golang.org/x/crypto/internal/alias", "\xcb\x02"},
+       {"vendor/golang.org/x/crypto/internal/poly1305", "R\x15\x99\x01"},
+       {"vendor/golang.org/x/net/dns/dnsmessage", "n"},
+       {"vendor/golang.org/x/net/http/httpguts", "\x87\x02\x14\x1a\x14\r"},
+       {"vendor/golang.org/x/net/http/httpproxy", "n\x03\x96\x01\x10\x05\x01\x18\x14\r"},
+       {"vendor/golang.org/x/net/http2/hpack", "\x03k\x03\x80\x01F"},
+       {"vendor/golang.org/x/net/idna", "q\x8c\x018\x14\x10\x02\x01"},
+       {"vendor/golang.org/x/net/nettest", "\x03d\a\x03\x80\x01\x11\x05\x16\x01\f\n\x01\x02\x02\x01\v"},
+       {"vendor/golang.org/x/sys/cpu", "\x9d\x02\r\n\x01\x16"},
+       {"vendor/golang.org/x/text/secure/bidirule", "n\xdb\x01\x11\x01"},
+       {"vendor/golang.org/x/text/transform", "\x03k\x83\x01X"},
+       {"vendor/golang.org/x/text/unicode/bidi", "\x03\bf\x84\x01>\x16"},
+       {"vendor/golang.org/x/text/unicode/norm", "g\n\x80\x01F\x12\x11"},
+       {"weak", "\x94\x01\x96\x01!"},
 }
index 64f0326b644d99e9441f9641b2af7d55882b3d95..c1faa50d367c199e58a15cd8c893de2490fca6ea 100644 (file)
@@ -502,6 +502,7 @@ var PackageSymbols = map[string][]Symbol{
                {"MD4", Const, 0, ""},
                {"MD5", Const, 0, ""},
                {"MD5SHA1", Const, 0, ""},
+               {"MessageSigner", Type, 25, ""},
                {"PrivateKey", Type, 0, ""},
                {"PublicKey", Type, 2, ""},
                {"RIPEMD160", Const, 0, ""},
@@ -517,6 +518,7 @@ var PackageSymbols = map[string][]Symbol{
                {"SHA512", Const, 0, ""},
                {"SHA512_224", Const, 5, ""},
                {"SHA512_256", Const, 5, ""},
+               {"SignMessage", Func, 25, "func(signer Signer, rand io.Reader, msg []byte, opts SignerOpts) (signature []byte, err error)"},
                {"Signer", Type, 4, ""},
                {"SignerOpts", Type, 4, ""},
        },
@@ -600,10 +602,12 @@ var PackageSymbols = map[string][]Symbol{
                {"X25519", Func, 20, "func() Curve"},
        },
        "crypto/ecdsa": {
+               {"(*PrivateKey).Bytes", Method, 25, ""},
                {"(*PrivateKey).ECDH", Method, 20, ""},
                {"(*PrivateKey).Equal", Method, 15, ""},
                {"(*PrivateKey).Public", Method, 4, ""},
                {"(*PrivateKey).Sign", Method, 4, ""},
+               {"(*PublicKey).Bytes", Method, 25, ""},
                {"(*PublicKey).ECDH", Method, 20, ""},
                {"(*PublicKey).Equal", Method, 15, ""},
                {"(PrivateKey).Add", Method, 0, ""},
@@ -619,6 +623,8 @@ var PackageSymbols = map[string][]Symbol{
                {"(PublicKey).ScalarBaseMult", Method, 0, ""},
                {"(PublicKey).ScalarMult", Method, 0, ""},
                {"GenerateKey", Func, 0, "func(c elliptic.Curve, rand io.Reader) (*PrivateKey, error)"},
+               {"ParseRawPrivateKey", Func, 25, "func(curve elliptic.Curve, data []byte) (*PrivateKey, error)"},
+               {"ParseUncompressedPublicKey", Func, 25, "func(curve elliptic.Curve, data []byte) (*PublicKey, error)"},
                {"PrivateKey", Type, 0, ""},
                {"PrivateKey.D", Field, 0, ""},
                {"PrivateKey.PublicKey", Field, 0, ""},
@@ -815,6 +821,7 @@ var PackageSymbols = map[string][]Symbol{
        "crypto/sha3": {
                {"(*SHA3).AppendBinary", Method, 24, ""},
                {"(*SHA3).BlockSize", Method, 24, ""},
+               {"(*SHA3).Clone", Method, 25, ""},
                {"(*SHA3).MarshalBinary", Method, 24, ""},
                {"(*SHA3).Reset", Method, 24, ""},
                {"(*SHA3).Size", Method, 24, ""},
@@ -967,6 +974,7 @@ var PackageSymbols = map[string][]Symbol{
                {"Config.GetCertificate", Field, 4, ""},
                {"Config.GetClientCertificate", Field, 8, ""},
                {"Config.GetConfigForClient", Field, 8, ""},
+               {"Config.GetEncryptedClientHelloKeys", Field, 25, ""},
                {"Config.InsecureSkipVerify", Field, 0, ""},
                {"Config.KeyLogWriter", Field, 8, ""},
                {"Config.MaxVersion", Field, 2, ""},
@@ -5463,6 +5471,7 @@ var PackageSymbols = map[string][]Symbol{
                {"ParenExpr.X", Field, 0, ""},
                {"Pkg", Const, 0, ""},
                {"Preorder", Func, 23, "func(root Node) iter.Seq[Node]"},
+               {"PreorderStack", Func, 25, "func(root Node, stack []Node, f func(n Node, stack []Node) bool)"},
                {"Print", Func, 0, "func(fset *token.FileSet, x any) error"},
                {"RECV", Const, 0, ""},
                {"RangeStmt", Type, 0, ""},
@@ -5933,6 +5942,7 @@ var PackageSymbols = map[string][]Symbol{
                {"(*File).SetLines", Method, 0, ""},
                {"(*File).SetLinesForContent", Method, 0, ""},
                {"(*File).Size", Method, 0, ""},
+               {"(*FileSet).AddExistingFiles", Method, 25, ""},
                {"(*FileSet).AddFile", Method, 0, ""},
                {"(*FileSet).Base", Method, 0, ""},
                {"(*FileSet).File", Method, 0, ""},
@@ -6382,7 +6392,7 @@ var PackageSymbols = map[string][]Symbol{
                {"Label", Type, 5, ""},
                {"LocalVar", Const, 25, ""},
                {"LookupFieldOrMethod", Func, 5, "func(T Type, addressable bool, pkg *Package, name string) (obj Object, index []int, indirect bool)"},
-               {"LookupSelection", Func, 25, ""},
+               {"LookupSelection", Func, 25, "func(T Type, addressable bool, pkg *Package, name string) (Selection, bool)"},
                {"Map", Type, 5, ""},
                {"MethodExpr", Const, 5, ""},
                {"MethodSet", Type, 5, ""},
@@ -6490,9 +6500,11 @@ var PackageSymbols = map[string][]Symbol{
                {"Lang", Func, 22, "func(x string) string"},
        },
        "hash": {
+               {"Cloner", Type, 25, ""},
                {"Hash", Type, 0, ""},
                {"Hash32", Type, 0, ""},
                {"Hash64", Type, 0, ""},
+               {"XOF", Type, 25, ""},
        },
        "hash/adler32": {
                {"Checksum", Func, 0, "func(data []byte) uint32"},
@@ -6533,6 +6545,7 @@ var PackageSymbols = map[string][]Symbol{
        },
        "hash/maphash": {
                {"(*Hash).BlockSize", Method, 14, ""},
+               {"(*Hash).Clone", Method, 25, ""},
                {"(*Hash).Reset", Method, 14, ""},
                {"(*Hash).Seed", Method, 14, ""},
                {"(*Hash).SetSeed", Method, 14, ""},
@@ -7133,7 +7146,7 @@ var PackageSymbols = map[string][]Symbol{
                {"FormatFileInfo", Func, 21, "func(info FileInfo) string"},
                {"Glob", Func, 16, "func(fsys FS, pattern string) (matches []string, err error)"},
                {"GlobFS", Type, 16, ""},
-               {"Lstat", Func, 25, ""},
+               {"Lstat", Func, 25, "func(fsys FS, name string) (FileInfo, error)"},
                {"ModeAppend", Const, 16, ""},
                {"ModeCharDevice", Const, 16, ""},
                {"ModeDevice", Const, 16, ""},
@@ -7158,7 +7171,7 @@ var PackageSymbols = map[string][]Symbol{
                {"ReadDirFile", Type, 16, ""},
                {"ReadFile", Func, 16, "func(fsys FS, name string) ([]byte, error)"},
                {"ReadFileFS", Type, 16, ""},
-               {"ReadLink", Func, 25, ""},
+               {"ReadLink", Func, 25, "func(fsys FS, name string) (string, error)"},
                {"ReadLinkFS", Type, 25, ""},
                {"SkipAll", Var, 20, ""},
                {"SkipDir", Var, 16, ""},
@@ -7275,6 +7288,7 @@ var PackageSymbols = map[string][]Symbol{
                {"(Record).Attrs", Method, 21, ""},
                {"(Record).Clone", Method, 21, ""},
                {"(Record).NumAttrs", Method, 21, ""},
+               {"(Record).Source", Method, 25, ""},
                {"(Value).Any", Method, 21, ""},
                {"(Value).Bool", Method, 21, ""},
                {"(Value).Duration", Method, 21, ""},
@@ -7306,6 +7320,7 @@ var PackageSymbols = map[string][]Symbol{
                {"Float64", Func, 21, "func(key string, v float64) Attr"},
                {"Float64Value", Func, 21, "func(v float64) Value"},
                {"Group", Func, 21, "func(key string, args ...any) Attr"},
+               {"GroupAttrs", Func, 25, "func(key string, attrs ...Attr) Attr"},
                {"GroupValue", Func, 21, "func(as ...Attr) Value"},
                {"Handler", Type, 21, ""},
                {"HandlerOptions", Type, 21, ""},
@@ -7916,7 +7931,7 @@ var PackageSymbols = map[string][]Symbol{
                {"(*Writer).WriteField", Method, 0, ""},
                {"ErrMessageTooLarge", Var, 9, ""},
                {"File", Type, 0, ""},
-               {"FileContentDisposition", Func, 25, ""},
+               {"FileContentDisposition", Func, 25, "func(fieldname string, filename string) string"},
                {"FileHeader", Type, 0, ""},
                {"FileHeader.Filename", Field, 0, ""},
                {"FileHeader.Header", Field, 0, ""},
@@ -8294,6 +8309,11 @@ var PackageSymbols = map[string][]Symbol{
                {"(*Client).PostForm", Method, 0, ""},
                {"(*Cookie).String", Method, 0, ""},
                {"(*Cookie).Valid", Method, 18, ""},
+               {"(*CrossOriginProtection).AddInsecureBypassPattern", Method, 25, ""},
+               {"(*CrossOriginProtection).AddTrustedOrigin", Method, 25, ""},
+               {"(*CrossOriginProtection).Check", Method, 25, ""},
+               {"(*CrossOriginProtection).Handler", Method, 25, ""},
+               {"(*CrossOriginProtection).SetDenyHandler", Method, 25, ""},
                {"(*MaxBytesError).Error", Method, 19, ""},
                {"(*ProtocolError).Error", Method, 0, ""},
                {"(*ProtocolError).Is", Method, 21, ""},
@@ -8388,6 +8408,7 @@ var PackageSymbols = map[string][]Symbol{
                {"Cookie.Unparsed", Field, 0, ""},
                {"Cookie.Value", Field, 0, ""},
                {"CookieJar", Type, 0, ""},
+               {"CrossOriginProtection", Type, 25, ""},
                {"DefaultClient", Var, 0, ""},
                {"DefaultMaxHeaderBytes", Const, 0, ""},
                {"DefaultMaxIdleConnsPerHost", Const, 0, ""},
@@ -8460,6 +8481,7 @@ var PackageSymbols = map[string][]Symbol{
                {"MethodPost", Const, 6, ""},
                {"MethodPut", Const, 6, ""},
                {"MethodTrace", Const, 6, ""},
+               {"NewCrossOriginProtection", Func, 25, "func() *CrossOriginProtection"},
                {"NewFileTransport", Func, 0, "func(fs FileSystem) RoundTripper"},
                {"NewFileTransportFS", Func, 22, "func(fsys fs.FS) RoundTripper"},
                {"NewRequest", Func, 0, "func(method string, url string, body io.Reader) (*Request, error)"},
@@ -9174,15 +9196,19 @@ var PackageSymbols = map[string][]Symbol{
                {"(*Root).Link", Method, 25, ""},
                {"(*Root).Lstat", Method, 24, ""},
                {"(*Root).Mkdir", Method, 24, ""},
+               {"(*Root).MkdirAll", Method, 25, ""},
                {"(*Root).Name", Method, 24, ""},
                {"(*Root).Open", Method, 24, ""},
                {"(*Root).OpenFile", Method, 24, ""},
                {"(*Root).OpenRoot", Method, 24, ""},
+               {"(*Root).ReadFile", Method, 25, ""},
                {"(*Root).Readlink", Method, 25, ""},
                {"(*Root).Remove", Method, 24, ""},
+               {"(*Root).RemoveAll", Method, 25, ""},
                {"(*Root).Rename", Method, 25, ""},
                {"(*Root).Stat", Method, 24, ""},
                {"(*Root).Symlink", Method, 25, ""},
+               {"(*Root).WriteFile", Method, 25, ""},
                {"(*SyscallError).Error", Method, 0, ""},
                {"(*SyscallError).Timeout", Method, 10, ""},
                {"(*SyscallError).Unwrap", Method, 13, ""},
@@ -9623,6 +9649,7 @@ var PackageSymbols = map[string][]Symbol{
                {"StructTag", Type, 0, ""},
                {"Swapper", Func, 8, "func(slice any) func(i int, j int)"},
                {"Type", Type, 0, ""},
+               {"TypeAssert", Func, 25, "func[T any](v Value) (T, bool)"},
                {"TypeFor", Func, 22, "func[T any]() Type"},
                {"TypeOf", Func, 0, "func(i any) Type"},
                {"Uint", Const, 0, ""},
@@ -9909,6 +9936,7 @@ var PackageSymbols = map[string][]Symbol{
                {"SetBlockProfileRate", Func, 1, "func(rate int)"},
                {"SetCPUProfileRate", Func, 0, "func(hz int)"},
                {"SetCgoTraceback", Func, 7, "func(version int, traceback unsafe.Pointer, context unsafe.Pointer, symbolizer unsafe.Pointer)"},
+               {"SetDefaultGOMAXPROCS", Func, 25, "func()"},
                {"SetFinalizer", Func, 0, "func(obj any, finalizer any)"},
                {"SetMutexProfileFraction", Func, 8, "func(rate int) int"},
                {"Stack", Func, 0, "func(buf []byte, all bool) int"},
@@ -10021,11 +10049,20 @@ var PackageSymbols = map[string][]Symbol{
                {"WriteHeapProfile", Func, 0, "func(w io.Writer) error"},
        },
        "runtime/trace": {
+               {"(*FlightRecorder).Enabled", Method, 25, ""},
+               {"(*FlightRecorder).Start", Method, 25, ""},
+               {"(*FlightRecorder).Stop", Method, 25, ""},
+               {"(*FlightRecorder).WriteTo", Method, 25, ""},
                {"(*Region).End", Method, 11, ""},
                {"(*Task).End", Method, 11, ""},
+               {"FlightRecorder", Type, 25, ""},
+               {"FlightRecorderConfig", Type, 25, ""},
+               {"FlightRecorderConfig.MaxBytes", Field, 25, ""},
+               {"FlightRecorderConfig.MinAge", Field, 25, ""},
                {"IsEnabled", Func, 11, "func() bool"},
                {"Log", Func, 11, "func(ctx context.Context, category string, message string)"},
                {"Logf", Func, 11, "func(ctx context.Context, category string, format string, args ...any)"},
+               {"NewFlightRecorder", Func, 25, "func(cfg FlightRecorderConfig) *FlightRecorder"},
                {"NewTask", Func, 11, "func(pctx context.Context, taskType string) (ctx context.Context, task *Task)"},
                {"Region", Type, 11, ""},
                {"Start", Func, 5, "func(w io.Writer) error"},
@@ -16642,6 +16679,7 @@ var PackageSymbols = map[string][]Symbol{
                {"ValueOf", Func, 0, ""},
        },
        "testing": {
+               {"(*B).Attr", Method, 25, ""},
                {"(*B).Chdir", Method, 24, ""},
                {"(*B).Cleanup", Method, 14, ""},
                {"(*B).Context", Method, 24, ""},
@@ -16658,6 +16696,7 @@ var PackageSymbols = map[string][]Symbol{
                {"(*B).Logf", Method, 0, ""},
                {"(*B).Loop", Method, 24, ""},
                {"(*B).Name", Method, 8, ""},
+               {"(*B).Output", Method, 25, ""},
                {"(*B).ReportAllocs", Method, 1, ""},
                {"(*B).ReportMetric", Method, 13, ""},
                {"(*B).ResetTimer", Method, 0, ""},
@@ -16674,6 +16713,7 @@ var PackageSymbols = map[string][]Symbol{
                {"(*B).StopTimer", Method, 0, ""},
                {"(*B).TempDir", Method, 15, ""},
                {"(*F).Add", Method, 18, ""},
+               {"(*F).Attr", Method, 25, ""},
                {"(*F).Chdir", Method, 24, ""},
                {"(*F).Cleanup", Method, 18, ""},
                {"(*F).Context", Method, 24, ""},
@@ -16689,6 +16729,7 @@ var PackageSymbols = map[string][]Symbol{
                {"(*F).Log", Method, 18, ""},
                {"(*F).Logf", Method, 18, ""},
                {"(*F).Name", Method, 18, ""},
+               {"(*F).Output", Method, 25, ""},
                {"(*F).Setenv", Method, 18, ""},
                {"(*F).Skip", Method, 18, ""},
                {"(*F).SkipNow", Method, 18, ""},
@@ -16697,6 +16738,7 @@ var PackageSymbols = map[string][]Symbol{
                {"(*F).TempDir", Method, 18, ""},
                {"(*M).Run", Method, 4, ""},
                {"(*PB).Next", Method, 3, ""},
+               {"(*T).Attr", Method, 25, ""},
                {"(*T).Chdir", Method, 24, ""},
                {"(*T).Cleanup", Method, 14, ""},
                {"(*T).Context", Method, 24, ""},
@@ -16712,6 +16754,7 @@ var PackageSymbols = map[string][]Symbol{
                {"(*T).Log", Method, 0, ""},
                {"(*T).Logf", Method, 0, ""},
                {"(*T).Name", Method, 8, ""},
+               {"(*T).Output", Method, 25, ""},
                {"(*T).Parallel", Method, 0, ""},
                {"(*T).Run", Method, 7, ""},
                {"(*T).Setenv", Method, 17, ""},
@@ -16834,6 +16877,10 @@ var PackageSymbols = map[string][]Symbol{
                {"Run", Func, 22, "func(t *testing.T, newHandler func(*testing.T) slog.Handler, result func(*testing.T) map[string]any)"},
                {"TestHandler", Func, 21, "func(h slog.Handler, results func() []map[string]any) error"},
        },
+       "testing/synctest": {
+               {"Test", Func, 25, "func(t *testing.T, f func(*testing.T))"},
+               {"Wait", Func, 25, "func()"},
+       },
        "text/scanner": {
                {"(*Position).IsValid", Method, 0, ""},
                {"(*Scanner).Init", Method, 0, ""},
@@ -17347,6 +17394,7 @@ var PackageSymbols = map[string][]Symbol{
                {"CaseRange.Lo", Field, 0, ""},
                {"CaseRanges", Var, 0, ""},
                {"Categories", Var, 0, ""},
+               {"CategoryAliases", Var, 25, ""},
                {"Caucasian_Albanian", Var, 4, ""},
                {"Cc", Var, 0, ""},
                {"Cf", Var, 0, ""},
@@ -17354,6 +17402,7 @@ var PackageSymbols = map[string][]Symbol{
                {"Cham", Var, 0, ""},
                {"Cherokee", Var, 0, ""},
                {"Chorasmian", Var, 16, ""},
+               {"Cn", Var, 25, ""},
                {"Co", Var, 0, ""},
                {"Common", Var, 0, ""},
                {"Coptic", Var, 0, ""},
@@ -17432,6 +17481,7 @@ var PackageSymbols = map[string][]Symbol{
                {"Khojki", Var, 4, ""},
                {"Khudawadi", Var, 4, ""},
                {"L", Var, 0, ""},
+               {"LC", Var, 25, ""},
                {"Lao", Var, 0, ""},
                {"Latin", Var, 0, ""},
                {"Lepcha", Var, 0, ""},
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/fx.go b/vendor/golang.org/x/tools/internal/typesinternal/fx.go
new file mode 100644 (file)
index 0000000..93acff2
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+import (
+       "go/ast"
+       "go/token"
+       "go/types"
+)
+
+// NoEffects reports whether the expression has no side effects, i.e., it
+// does not modify the memory state. This function is conservative: it may
+// return false even when the expression has no effect.
+func NoEffects(info *types.Info, expr ast.Expr) bool {
+       noEffects := true
+       ast.Inspect(expr, func(n ast.Node) bool {
+               switch v := n.(type) {
+               case nil, *ast.Ident, *ast.BasicLit, *ast.BinaryExpr, *ast.ParenExpr,
+                       *ast.SelectorExpr, *ast.IndexExpr, *ast.SliceExpr, *ast.TypeAssertExpr,
+                       *ast.StarExpr, *ast.CompositeLit, *ast.ArrayType, *ast.StructType,
+                       *ast.MapType, *ast.InterfaceType, *ast.KeyValueExpr:
+                       // No effect
+               case *ast.UnaryExpr:
+                       // Channel send <-ch has effects
+                       if v.Op == token.ARROW {
+                               noEffects = false
+                       }
+               case *ast.CallExpr:
+                       // Type conversion has no effects
+                       if !info.Types[v.Fun].IsType() {
+                               // TODO(adonovan): Add a case for built-in functions without side
+                               // effects (by using callsPureBuiltin from tools/internal/refactor/inline)
+
+                               noEffects = false
+                       }
+               case *ast.FuncLit:
+                       // A FuncLit has no effects, but do not descend into it.
+                       return false
+               default:
+                       // All other expressions have effects
+                       noEffects = false
+               }
+
+               return noEffects
+       })
+       return noEffects
+}
diff --git a/vendor/golang.org/x/tools/internal/typesinternal/isnamed.go b/vendor/golang.org/x/tools/internal/typesinternal/isnamed.go
new file mode 100644 (file)
index 0000000..f2affec
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package typesinternal
+
+import (
+       "go/types"
+       "slices"
+)
+
+// IsTypeNamed reports whether t is (or is an alias for) a
+// package-level defined type with the given package path and one of
+// the given names. It returns false if t is nil.
+//
+// This function avoids allocating the concatenation of "pkg.Name",
+// which is important for the performance of syntax matching.
+func IsTypeNamed(t types.Type, pkgPath string, names ...string) bool {
+       if named, ok := types.Unalias(t).(*types.Named); ok {
+               tname := named.Obj()
+               return tname != nil &&
+                       IsPackageLevel(tname) &&
+                       tname.Pkg().Path() == pkgPath &&
+                       slices.Contains(names, tname.Name())
+       }
+       return false
+}
+
+// IsPointerToNamed reports whether t is (or is an alias for) a pointer to a
+// package-level defined type with the given package path and one of the given
+// names. It returns false if t is not a pointer type.
+func IsPointerToNamed(t types.Type, pkgPath string, names ...string) bool {
+       r := Unpointer(t)
+       if r == t {
+               return false
+       }
+       return IsTypeNamed(r, pkgPath, names...)
+}
+
+// IsFunctionNamed reports whether obj is a package-level function
+// defined in the given package and has one of the given names.
+// It returns false if obj is nil.
+//
+// This function avoids allocating the concatenation of "pkg.Name",
+// which is important for the performance of syntax matching.
+func IsFunctionNamed(obj types.Object, pkgPath string, names ...string) bool {
+       f, ok := obj.(*types.Func)
+       return ok &&
+               IsPackageLevel(obj) &&
+               f.Pkg().Path() == pkgPath &&
+               f.Type().(*types.Signature).Recv() == nil &&
+               slices.Contains(names, f.Name())
+}
+
+// IsMethodNamed reports whether obj is a method defined on a
+// package-level type with the given package and type name, and has
+// one of the given names. It returns false if obj is nil.
+//
+// This function avoids allocating the concatenation of "pkg.TypeName.Name",
+// which is important for the performance of syntax matching.
+func IsMethodNamed(obj types.Object, pkgPath string, typeName string, names ...string) bool {
+       if fn, ok := obj.(*types.Func); ok {
+               if recv := fn.Type().(*types.Signature).Recv(); recv != nil {
+                       _, T := ReceiverNamed(recv)
+                       return T != nil &&
+                               IsTypeNamed(T, pkgPath, typeName) &&
+                               slices.Contains(names, fn.Name())
+               }
+       }
+       return false
+}
index b64f714eb30f6ea68841a6628373e0c9a5dbbb04..64f47919f02e269c41c034728c29031be80f5498 100644 (file)
@@ -15,6 +15,14 @@ import (
 // file.
 // If the same package is imported multiple times, the last appearance is
 // recorded.
+//
+// TODO(adonovan): this function ignores the effect of shadowing. It
+// should accept a [token.Pos] and a [types.Info] and compute only the
+// set of imports that are not shadowed at that point, analogous to
+// [analysisinternal.AddImport]. It could also compute (as a side
+// effect) the set of additional imports required to ensure that there
+// is an accessible import for each necessary package, making it
+// converge even more closely with AddImport.
 func FileQualifier(f *ast.File, pkg *types.Package) types.Qualifier {
        // Construct mapping of import paths to their defined names.
        // It is only necessary to look at renaming imports.
index a5cd7e8dbfcb9d9f7f46475dc04067ccec634fa9..fef74a785604804141c192da4cf5da98419faa5d 100644 (file)
@@ -2,8 +2,20 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package typesinternal provides access to internal go/types APIs that are not
-// yet exported.
+// Package typesinternal provides helpful operators for dealing with
+// go/types:
+//
+//   - operators for querying typed syntax trees (e.g. [Imports], [IsFunctionNamed]);
+//   - functions for converting types to strings or syntax (e.g. [TypeExpr], FileQualifier]);
+//   - helpers for working with the [go/types] API (e.g. [NewTypesInfo]);
+//   - access to internal go/types APIs that are not yet
+//     exported (e.g. [SetUsesCgo], [ErrorCodeStartEnd], [VarKind]); and
+//   - common algorithms related to types (e.g. [TooNewStdSymbols]).
+//
+// See also:
+//   - [golang.org/x/tools/internal/astutil], for operations on untyped syntax;
+//   - [golang.org/x/tools/internal/analysisinernal], for helpers for analyzers;
+//   - [golang.org/x/tools/internal/refactor], for operators to compute text edits.
 package typesinternal
 
 import (
@@ -13,6 +25,7 @@ import (
        "reflect"
        "unsafe"
 
+       "golang.org/x/tools/go/ast/inspector"
        "golang.org/x/tools/internal/aliases"
 )
 
@@ -60,6 +73,9 @@ func ErrorCodeStartEnd(err types.Error) (code ErrorCode, start, end token.Pos, o
 // which is often excessive.)
 //
 // If pkg is nil, it is equivalent to [*types.Package.Name].
+//
+// TODO(adonovan): all uses of this with TypeString should be
+// eliminated when https://go.dev/issues/75604 is resolved.
 func NameRelativeTo(pkg *types.Package) types.Qualifier {
        return func(other *types.Package) string {
                if pkg != nil && pkg == other {
@@ -153,3 +169,31 @@ func NewTypesInfo() *types.Info {
                FileVersions: map[*ast.File]string{},
        }
 }
+
+// EnclosingScope returns the innermost block logically enclosing the cursor.
+func EnclosingScope(info *types.Info, cur inspector.Cursor) *types.Scope {
+       for cur := range cur.Enclosing() {
+               n := cur.Node()
+               // A function's Scope is associated with its FuncType.
+               switch f := n.(type) {
+               case *ast.FuncDecl:
+                       n = f.Type
+               case *ast.FuncLit:
+                       n = f.Type
+               }
+               if b := info.Scopes[n]; b != nil {
+                       return b
+               }
+       }
+       panic("no Scope for *ast.File")
+}
+
+// Imports reports whether path is imported by pkg.
+func Imports(pkg *types.Package, path string) bool {
+       for _, imp := range pkg.Imports() {
+               if imp.Path() == path {
+                       return true
+               }
+       }
+       return false
+}
index d272949c17718996d7c09589b45284636181dd86..453bba2ad5e8402f3ddf4104e4e040ae2180f43a 100644 (file)
@@ -204,23 +204,12 @@ func ZeroExpr(t types.Type, qual types.Qualifier) (_ ast.Expr, isValid bool) {
        }
 }
 
-// IsZeroExpr uses simple syntactic heuristics to report whether expr
-// is a obvious zero value, such as 0, "", nil, or false.
-// It cannot do better without type information.
-func IsZeroExpr(expr ast.Expr) bool {
-       switch e := expr.(type) {
-       case *ast.BasicLit:
-               return e.Value == "0" || e.Value == `""`
-       case *ast.Ident:
-               return e.Name == "nil" || e.Name == "false"
-       default:
-               return false
-       }
-}
-
 // TypeExpr returns syntax for the specified type. References to named types
 // are qualified by an appropriate (optional) qualifier function.
 // It may panic for types such as Tuple or Union.
+//
+// See also https://go.dev/issues/75604, which will provide a robust
+// Type-to-valid-Go-syntax formatter.
 func TypeExpr(t types.Type, qual types.Qualifier) ast.Expr {
        switch t := t.(type) {
        case *types.Basic:
index a321cfb5949d586b4b0ec9fb3eb01f5acd8d38d9..758ebad7f1596a95fb74b39ed30165418c0cd6fb 100644 (file)
@@ -800,8 +800,8 @@ go.yaml.in/yaml/v2
 # go.yaml.in/yaml/v3 v3.0.4
 ## explicit; go 1.16
 go.yaml.in/yaml/v3
-# golang.org/x/crypto v0.41.0
-## explicit; go 1.23.0
+# golang.org/x/crypto v0.45.0
+## explicit; go 1.24.0
 golang.org/x/crypto/bcrypt
 golang.org/x/crypto/blowfish
 golang.org/x/crypto/chacha20
@@ -821,13 +821,13 @@ golang.org/x/crypto/ssh/internal/bcrypt_pbkdf
 ## explicit; go 1.20
 golang.org/x/exp/constraints
 golang.org/x/exp/slices
-# golang.org/x/mod v0.28.0
+# golang.org/x/mod v0.29.0
 ## explicit; go 1.24.0
 golang.org/x/mod/internal/lazyregexp
 golang.org/x/mod/module
 golang.org/x/mod/semver
-# golang.org/x/net v0.43.0
-## explicit; go 1.23.0
+# golang.org/x/net v0.47.0
+## explicit; go 1.24.0
 golang.org/x/net/context
 golang.org/x/net/dns/dnsmessage
 golang.org/x/net/html
@@ -847,11 +847,11 @@ golang.org/x/net/websocket
 ## explicit; go 1.23.0
 golang.org/x/oauth2
 golang.org/x/oauth2/internal
-# golang.org/x/sync v0.17.0
+# golang.org/x/sync v0.18.0
 ## explicit; go 1.24.0
 golang.org/x/sync/errgroup
 golang.org/x/sync/singleflight
-# golang.org/x/sys v0.37.0
+# golang.org/x/sys v0.38.0
 ## explicit; go 1.24.0
 golang.org/x/sys/cpu
 golang.org/x/sys/plan9
@@ -860,10 +860,10 @@ golang.org/x/sys/windows
 golang.org/x/sys/windows/registry
 golang.org/x/sys/windows/svc
 golang.org/x/sys/windows/svc/mgr
-# golang.org/x/term v0.36.0
+# golang.org/x/term v0.37.0
 ## explicit; go 1.24.0
 golang.org/x/term
-# golang.org/x/text v0.29.0
+# golang.org/x/text v0.31.0
 ## explicit; go 1.24.0
 golang.org/x/text/cases
 golang.org/x/text/encoding
@@ -897,8 +897,8 @@ golang.org/x/text/unicode/norm
 # golang.org/x/time v0.9.0
 ## explicit; go 1.18
 golang.org/x/time/rate
-# golang.org/x/tools v0.36.0
-## explicit; go 1.23.0
+# golang.org/x/tools v0.38.0
+## explicit; go 1.24.0
 golang.org/x/tools/benchmark/parse
 golang.org/x/tools/container/intsets
 golang.org/x/tools/cover