vendor: k8s v0.35.4
Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
@@ -72,9 +72,9 @@ require (
|
|||||||
google.golang.org/grpc v1.79.3
|
google.golang.org/grpc v1.79.3
|
||||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1
|
||||||
google.golang.org/protobuf v1.36.11
|
google.golang.org/protobuf v1.36.11
|
||||||
k8s.io/api v0.35.2
|
k8s.io/api v0.35.4
|
||||||
k8s.io/apimachinery v0.35.2
|
k8s.io/apimachinery v0.35.4
|
||||||
k8s.io/client-go v0.35.2
|
k8s.io/client-go v0.35.4
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -171,7 +171,7 @@ require (
|
|||||||
github.com/moby/docker-image-spec v1.3.1 // indirect
|
github.com/moby/docker-image-spec v1.3.1 // indirect
|
||||||
github.com/moby/locker v1.0.1 // indirect
|
github.com/moby/locker v1.0.1 // indirect
|
||||||
github.com/moby/patternmatcher v0.6.1 // indirect
|
github.com/moby/patternmatcher v0.6.1 // indirect
|
||||||
github.com/moby/spdystream v0.5.0 // indirect
|
github.com/moby/spdystream v0.5.1 // indirect
|
||||||
github.com/moby/sys/sequential v0.6.0 // indirect
|
github.com/moby/sys/sequential v0.6.0 // indirect
|
||||||
github.com/moby/sys/signal v0.7.1 // indirect
|
github.com/moby/sys/signal v0.7.1 // indirect
|
||||||
github.com/moby/sys/user v0.4.0 // indirect
|
github.com/moby/sys/user v0.4.0 // indirect
|
||||||
|
|||||||
@@ -436,8 +436,8 @@ github.com/moby/patternmatcher v0.6.1 h1:qlhtafmr6kgMIJjKJMDmMWq7WLkKIo23hsrpR3x
|
|||||||
github.com/moby/patternmatcher v0.6.1/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
|
github.com/moby/patternmatcher v0.6.1/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
|
||||||
github.com/moby/policy-helpers v0.0.0-20260324161837-b7c0b994300b h1:lvBBM2ACrsG5/O1G1caEwlh0XeqA89IQK3xq0Sh/5NI=
|
github.com/moby/policy-helpers v0.0.0-20260324161837-b7c0b994300b h1:lvBBM2ACrsG5/O1G1caEwlh0XeqA89IQK3xq0Sh/5NI=
|
||||||
github.com/moby/policy-helpers v0.0.0-20260324161837-b7c0b994300b/go.mod h1:Cbc1brDwYl1K294MmZB+6WhQR9Tr24hfhgSGND4UlL0=
|
github.com/moby/policy-helpers v0.0.0-20260324161837-b7c0b994300b/go.mod h1:Cbc1brDwYl1K294MmZB+6WhQR9Tr24hfhgSGND4UlL0=
|
||||||
github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
|
github.com/moby/spdystream v0.5.1 h1:9sNYeYZUcci9R6/w7KDaFWEWeV4LStVG78Mpyq/Zm/Y=
|
||||||
github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
|
github.com/moby/spdystream v0.5.1/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
|
||||||
github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
|
github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
|
||||||
github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs=
|
github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs=
|
||||||
github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
|
github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
|
||||||
@@ -742,12 +742,12 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
|
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
|
||||||
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
|
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
|
||||||
k8s.io/api v0.35.2 h1:tW7mWc2RpxW7HS4CoRXhtYHSzme1PN1UjGHJ1bdrtdw=
|
k8s.io/api v0.35.4 h1:P7nFYKl5vo9AGUp1Z+Pmd3p2tA7bX2wbFWCvDeRv988=
|
||||||
k8s.io/api v0.35.2/go.mod h1:7AJfqGoAZcwSFhOjcGM7WV05QxMMgUaChNfLTXDRE60=
|
k8s.io/api v0.35.4/go.mod h1:yl4lqySWOgYJJf9RERXKUwE9g2y+CkuwG+xmcOK8wXU=
|
||||||
k8s.io/apimachinery v0.35.2 h1:NqsM/mmZA7sHW02JZ9RTtk3wInRgbVxL8MPfzSANAK8=
|
k8s.io/apimachinery v0.35.4 h1:xtdom9RG7e+yDp71uoXoJDWEE2eOiHgeO4GdBzwWpds=
|
||||||
k8s.io/apimachinery v0.35.2/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns=
|
k8s.io/apimachinery v0.35.4/go.mod h1:NNi1taPOpep0jOj+oRha3mBJPqvi0hGdaV8TCqGQ+cc=
|
||||||
k8s.io/client-go v0.35.2 h1:YUfPefdGJA4aljDdayAXkc98DnPkIetMl4PrKX97W9o=
|
k8s.io/client-go v0.35.4 h1:DN6fyaGuzK64UvnKO5fOA6ymSjvfGAnCAHAR0C66kD8=
|
||||||
k8s.io/client-go v0.35.2/go.mod h1:4QqEwh4oQpeK8AaefZ0jwTFJw/9kIjdQi0jpKeYvz7g=
|
k8s.io/client-go v0.35.4/go.mod h1:2Pg9WpsS4NeOpoYTfHHfMxBG8zFMSAUi4O/qoiJC3nY=
|
||||||
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
|
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
|
||||||
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
||||||
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
|
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
|
||||||
|
|||||||
+12
@@ -3,3 +3,15 @@ Copyright 2014-2021 Docker Inc.
|
|||||||
|
|
||||||
This product includes software developed at
|
This product includes software developed at
|
||||||
Docker Inc. (https://www.docker.com/).
|
Docker Inc. (https://www.docker.com/).
|
||||||
|
|
||||||
|
SPDY implementation (spdy/)
|
||||||
|
|
||||||
|
The spdy directory contains code derived from the Go project (golang.org/x/net).
|
||||||
|
|
||||||
|
Copyright 2009-2013 The Go Authors.
|
||||||
|
Licensed under the BSD 3-Clause License.
|
||||||
|
|
||||||
|
Modifications Copyright 2014-2021 Docker Inc.
|
||||||
|
|
||||||
|
The BSD license text and Go patent grant are included in
|
||||||
|
spdy/LICENSE and spdy/PATENTS.
|
||||||
|
|||||||
+10
-1
@@ -224,7 +224,13 @@ type Connection struct {
|
|||||||
// NewConnection creates a new spdy connection from an existing
|
// NewConnection creates a new spdy connection from an existing
|
||||||
// network connection.
|
// network connection.
|
||||||
func NewConnection(conn net.Conn, server bool) (*Connection, error) {
|
func NewConnection(conn net.Conn, server bool) (*Connection, error) {
|
||||||
framer, framerErr := spdy.NewFramer(conn, conn)
|
return NewConnectionWithOptions(conn, server)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewConnectionWithOptions creates a new spdy connection and applies frame
|
||||||
|
// parsing limits via options.
|
||||||
|
func NewConnectionWithOptions(conn net.Conn, server bool, opts ...spdy.FramerOption) (*Connection, error) {
|
||||||
|
framer, framerErr := spdy.NewFramerWithOptions(conn, conn, opts...)
|
||||||
if framerErr != nil {
|
if framerErr != nil {
|
||||||
return nil, framerErr
|
return nil, framerErr
|
||||||
}
|
}
|
||||||
@@ -350,6 +356,9 @@ Loop:
|
|||||||
} else {
|
} else {
|
||||||
debugMessage("(%p) EOF received", s)
|
debugMessage("(%p) EOF received", s)
|
||||||
}
|
}
|
||||||
|
if spdyErr, ok := err.(*spdy.Error); ok && spdyErr.Err == spdy.InvalidControlFrame {
|
||||||
|
_ = s.conn.Close()
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
var priority uint8
|
var priority uint8
|
||||||
|
|||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
|
in the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
Additional IP Rights Grant (Patents)
|
||||||
|
|
||||||
|
"This implementation" means the copyrightable works distributed by
|
||||||
|
Google as part of the Go project.
|
||||||
|
|
||||||
|
Google hereby grants to You a perpetual, worldwide, non-exclusive,
|
||||||
|
no-charge, royalty-free, irrevocable (except as stated in this section)
|
||||||
|
patent license to make, have made, use, offer to sell, sell, import,
|
||||||
|
transfer and otherwise run, modify and propagate the contents of this
|
||||||
|
implementation of Go, where such license applies only to those patent
|
||||||
|
claims, both currently owned or controlled by Google and acquired in
|
||||||
|
the future, licensable by Google that are necessarily infringed by this
|
||||||
|
implementation of Go. This grant does not include claims that would be
|
||||||
|
infringed only as a consequence of further modification of this
|
||||||
|
implementation. If you or your agent or exclusive licensee institute or
|
||||||
|
order or agree to the institution of patent litigation against any
|
||||||
|
entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
||||||
|
that this implementation of Go or any code incorporated within this
|
||||||
|
implementation of Go constitutes direct or contributory patent
|
||||||
|
infringement, or inducement of patent infringement, then any patent
|
||||||
|
rights granted to you under this License for this implementation of Go
|
||||||
|
shall terminate as of the date such litigation is filed.
|
||||||
-16
@@ -1,19 +1,3 @@
|
|||||||
/*
|
|
||||||
Copyright 2014-2021 Docker Inc.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
// Copyright 2013 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
package spdy
|
||||||
|
|
||||||
|
// FramerOption allows callers to customize frame parsing limits.
|
||||||
|
type FramerOption func(*Framer)
|
||||||
|
|
||||||
|
// WithMaxControlFramePayloadSize sets the control-frame payload limit.
|
||||||
|
func WithMaxControlFramePayloadSize(size uint32) FramerOption {
|
||||||
|
return func(f *Framer) {
|
||||||
|
f.maxFrameLength = size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMaxHeaderFieldSize sets the per-header name/value size limit.
|
||||||
|
func WithMaxHeaderFieldSize(size uint32) FramerOption {
|
||||||
|
return func(f *Framer) {
|
||||||
|
f.maxHeaderFieldSize = size
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMaxHeaderCount sets the maximum number of headers in a frame.
|
||||||
|
func WithMaxHeaderCount(count uint32) FramerOption {
|
||||||
|
return func(f *Framer) {
|
||||||
|
f.maxHeaderCount = count
|
||||||
|
}
|
||||||
|
}
|
||||||
+38
-20
@@ -1,19 +1,3 @@
|
|||||||
/*
|
|
||||||
Copyright 2014-2021 Docker Inc.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Copyright 2011 The Go Authors. All rights reserved.
|
// Copyright 2011 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
@@ -24,6 +8,7 @@ import (
|
|||||||
"compress/zlib"
|
"compress/zlib"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"io"
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
@@ -59,6 +44,11 @@ func (frame *SettingsFrame) read(h ControlFrameHeader, f *Framer) error {
|
|||||||
if err := binary.Read(f.r, binary.BigEndian, &numSettings); err != nil {
|
if err := binary.Read(f.r, binary.BigEndian, &numSettings); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
// Each setting is 8 bytes (4-byte id + 4-byte value).
|
||||||
|
// Payload is 4 bytes for numSettings + numSettings*8.
|
||||||
|
if h.length < 4 || numSettings > (h.length-4)/8 {
|
||||||
|
return &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
frame.FlagIdValues = make([]SettingsFlagIdValue, numSettings)
|
frame.FlagIdValues = make([]SettingsFlagIdValue, numSettings)
|
||||||
for i := uint32(0); i < numSettings; i++ {
|
for i := uint32(0); i < numSettings; i++ {
|
||||||
if err := binary.Read(f.r, binary.BigEndian, &frame.FlagIdValues[i].Id); err != nil {
|
if err := binary.Read(f.r, binary.BigEndian, &frame.FlagIdValues[i].Id); err != nil {
|
||||||
@@ -177,8 +167,19 @@ func (f *Framer) parseControlFrame(version uint16, frameType ControlFrameType) (
|
|||||||
if err := binary.Read(f.r, binary.BigEndian, &length); err != nil {
|
if err := binary.Read(f.r, binary.BigEndian, &length); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
maxControlFramePayload := uint32(MaxDataLength)
|
||||||
|
if f.maxFrameLength > 0 {
|
||||||
|
maxControlFramePayload = f.maxFrameLength
|
||||||
|
}
|
||||||
|
|
||||||
flags := ControlFlags((length & 0xff000000) >> 24)
|
flags := ControlFlags((length & 0xff000000) >> 24)
|
||||||
length &= 0xffffff
|
length &= 0xffffff
|
||||||
|
if length > maxControlFramePayload {
|
||||||
|
if _, err := io.CopyN(ioutil.Discard, f.r, int64(length)); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return nil, &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
header := ControlFrameHeader{version, frameType, flags, length}
|
header := ControlFrameHeader{version, frameType, flags, length}
|
||||||
cframe, err := newControlFrame(frameType)
|
cframe, err := newControlFrame(frameType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -190,11 +191,22 @@ func (f *Framer) parseControlFrame(version uint16, frameType ControlFrameType) (
|
|||||||
return cframe, nil
|
return cframe, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseHeaderValueBlock(r io.Reader, streamId StreamId) (http.Header, error) {
|
func (f *Framer) parseHeaderValueBlock(r io.Reader, streamId StreamId) (http.Header, error) {
|
||||||
var numHeaders uint32
|
var numHeaders uint32
|
||||||
if err := binary.Read(r, binary.BigEndian, &numHeaders); err != nil {
|
if err := binary.Read(r, binary.BigEndian, &numHeaders); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
maxHeaders := defaultMaxHeaderCount
|
||||||
|
if f.maxHeaderCount > 0 {
|
||||||
|
maxHeaders = f.maxHeaderCount
|
||||||
|
}
|
||||||
|
if numHeaders > maxHeaders {
|
||||||
|
return nil, &Error{InvalidControlFrame, streamId}
|
||||||
|
}
|
||||||
|
maxFieldSize := defaultMaxHeaderFieldSize
|
||||||
|
if f.maxHeaderFieldSize > 0 {
|
||||||
|
maxFieldSize = f.maxHeaderFieldSize
|
||||||
|
}
|
||||||
var e error
|
var e error
|
||||||
h := make(http.Header, int(numHeaders))
|
h := make(http.Header, int(numHeaders))
|
||||||
for i := 0; i < int(numHeaders); i++ {
|
for i := 0; i < int(numHeaders); i++ {
|
||||||
@@ -202,6 +214,9 @@ func parseHeaderValueBlock(r io.Reader, streamId StreamId) (http.Header, error)
|
|||||||
if err := binary.Read(r, binary.BigEndian, &length); err != nil {
|
if err := binary.Read(r, binary.BigEndian, &length); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if length > maxFieldSize {
|
||||||
|
return nil, &Error{InvalidControlFrame, streamId}
|
||||||
|
}
|
||||||
nameBytes := make([]byte, length)
|
nameBytes := make([]byte, length)
|
||||||
if _, err := io.ReadFull(r, nameBytes); err != nil {
|
if _, err := io.ReadFull(r, nameBytes); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -217,6 +232,9 @@ func parseHeaderValueBlock(r io.Reader, streamId StreamId) (http.Header, error)
|
|||||||
if err := binary.Read(r, binary.BigEndian, &length); err != nil {
|
if err := binary.Read(r, binary.BigEndian, &length); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if length > maxFieldSize {
|
||||||
|
return nil, &Error{InvalidControlFrame, streamId}
|
||||||
|
}
|
||||||
value := make([]byte, length)
|
value := make([]byte, length)
|
||||||
if _, err := io.ReadFull(r, value); err != nil {
|
if _, err := io.ReadFull(r, value); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -256,7 +274,7 @@ func (f *Framer) readSynStreamFrame(h ControlFrameHeader, frame *SynStreamFrame)
|
|||||||
}
|
}
|
||||||
reader = f.headerDecompressor
|
reader = f.headerDecompressor
|
||||||
}
|
}
|
||||||
frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId)
|
frame.Headers, err = f.parseHeaderValueBlock(reader, frame.StreamId)
|
||||||
if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
|
if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
|
||||||
err = &Error{WrongCompressedPayloadSize, 0}
|
err = &Error{WrongCompressedPayloadSize, 0}
|
||||||
}
|
}
|
||||||
@@ -288,7 +306,7 @@ func (f *Framer) readSynReplyFrame(h ControlFrameHeader, frame *SynReplyFrame) e
|
|||||||
}
|
}
|
||||||
reader = f.headerDecompressor
|
reader = f.headerDecompressor
|
||||||
}
|
}
|
||||||
frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId)
|
frame.Headers, err = f.parseHeaderValueBlock(reader, frame.StreamId)
|
||||||
if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
|
if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
|
||||||
err = &Error{WrongCompressedPayloadSize, 0}
|
err = &Error{WrongCompressedPayloadSize, 0}
|
||||||
}
|
}
|
||||||
@@ -320,7 +338,7 @@ func (f *Framer) readHeadersFrame(h ControlFrameHeader, frame *HeadersFrame) err
|
|||||||
}
|
}
|
||||||
reader = f.headerDecompressor
|
reader = f.headerDecompressor
|
||||||
}
|
}
|
||||||
frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId)
|
frame.Headers, err = f.parseHeaderValueBlock(reader, frame.StreamId)
|
||||||
if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
|
if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
|
||||||
err = &Error{WrongCompressedPayloadSize, 0}
|
err = &Error{WrongCompressedPayloadSize, 0}
|
||||||
}
|
}
|
||||||
|
|||||||
+33
-16
@@ -1,23 +1,9 @@
|
|||||||
/*
|
|
||||||
Copyright 2014-2021 Docker Inc.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Copyright 2011 The Go Authors. All rights reserved.
|
// Copyright 2011 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Modifications Copyright 2014-2021 Docker Inc.
|
||||||
|
|
||||||
// Package spdy implements the SPDY protocol (currently SPDY/3), described in
|
// Package spdy implements the SPDY protocol (currently SPDY/3), described in
|
||||||
// http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3.
|
// http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3.
|
||||||
package spdy
|
package spdy
|
||||||
@@ -63,8 +49,20 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// MaxDataLength is the maximum number of bytes that can be stored in one frame.
|
// MaxDataLength is the maximum number of bytes that can be stored in one frame.
|
||||||
|
//
|
||||||
|
// SPDY frame headers encode the payload length using a 24-bit field,
|
||||||
|
// so the maximum representable size for both data and control frames
|
||||||
|
// is 2^24-1 bytes.
|
||||||
|
//
|
||||||
|
// See the SPDY/3 specification, "Frame Format":
|
||||||
|
// https://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1/
|
||||||
const MaxDataLength = 1<<24 - 1
|
const MaxDataLength = 1<<24 - 1
|
||||||
|
|
||||||
|
const (
|
||||||
|
defaultMaxHeaderFieldSize uint32 = 1 << 20
|
||||||
|
defaultMaxHeaderCount uint32 = 1000
|
||||||
|
)
|
||||||
|
|
||||||
// headerValueSepator separates multiple header values.
|
// headerValueSepator separates multiple header values.
|
||||||
const headerValueSeparator = "\x00"
|
const headerValueSeparator = "\x00"
|
||||||
|
|
||||||
@@ -269,6 +267,10 @@ type Framer struct {
|
|||||||
r io.Reader
|
r io.Reader
|
||||||
headerReader io.LimitedReader
|
headerReader io.LimitedReader
|
||||||
headerDecompressor io.ReadCloser
|
headerDecompressor io.ReadCloser
|
||||||
|
|
||||||
|
maxFrameLength uint32 // overrides the default frame payload length limit.
|
||||||
|
maxHeaderFieldSize uint32 // overrides the default per-header name/value length limit.
|
||||||
|
maxHeaderCount uint32 // overrides the default header count limit.
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFramer allocates a new Framer for a given SPDY connection, represented by
|
// NewFramer allocates a new Framer for a given SPDY connection, represented by
|
||||||
@@ -276,6 +278,16 @@ type Framer struct {
|
|||||||
// from/to the Reader and Writer, so the caller should pass in an appropriately
|
// from/to the Reader and Writer, so the caller should pass in an appropriately
|
||||||
// buffered implementation to optimize performance.
|
// buffered implementation to optimize performance.
|
||||||
func NewFramer(w io.Writer, r io.Reader) (*Framer, error) {
|
func NewFramer(w io.Writer, r io.Reader) (*Framer, error) {
|
||||||
|
return newFramer(w, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewFramerWithOptions allocates a new Framer for a given SPDY connection and
|
||||||
|
// applies frame parsing limits via options.
|
||||||
|
func NewFramerWithOptions(w io.Writer, r io.Reader, opts ...FramerOption) (*Framer, error) {
|
||||||
|
return newFramer(w, r, opts...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func newFramer(w io.Writer, r io.Reader, opts ...FramerOption) (*Framer, error) {
|
||||||
compressBuf := new(bytes.Buffer)
|
compressBuf := new(bytes.Buffer)
|
||||||
compressor, err := zlib.NewWriterLevelDict(compressBuf, zlib.BestCompression, []byte(headerDictionary))
|
compressor, err := zlib.NewWriterLevelDict(compressBuf, zlib.BestCompression, []byte(headerDictionary))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -287,5 +299,10 @@ func NewFramer(w io.Writer, r io.Reader) (*Framer, error) {
|
|||||||
headerCompressor: compressor,
|
headerCompressor: compressor,
|
||||||
r: r,
|
r: r,
|
||||||
}
|
}
|
||||||
|
for _, opt := range opts {
|
||||||
|
if opt != nil {
|
||||||
|
opt(framer)
|
||||||
|
}
|
||||||
|
}
|
||||||
return framer, nil
|
return framer, nil
|
||||||
}
|
}
|
||||||
|
|||||||
+51
-30
@@ -1,19 +1,3 @@
|
|||||||
/*
|
|
||||||
Copyright 2014-2021 Docker Inc.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Copyright 2011 The Go Authors. All rights reserved.
|
// Copyright 2011 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
@@ -23,6 +7,7 @@ package spdy
|
|||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"io"
|
"io"
|
||||||
|
"math"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
@@ -63,13 +48,21 @@ func (frame *RstStreamFrame) write(f *Framer) (err error) {
|
|||||||
func (frame *SettingsFrame) write(f *Framer) (err error) {
|
func (frame *SettingsFrame) write(f *Framer) (err error) {
|
||||||
frame.CFHeader.version = Version
|
frame.CFHeader.version = Version
|
||||||
frame.CFHeader.frameType = TypeSettings
|
frame.CFHeader.frameType = TypeSettings
|
||||||
frame.CFHeader.length = uint32(len(frame.FlagIdValues)*8 + 4)
|
payloadLen := len(frame.FlagIdValues)*8 + 4
|
||||||
|
if payloadLen > MaxDataLength {
|
||||||
|
return &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
|
frame.CFHeader.length = uint32(payloadLen)
|
||||||
|
|
||||||
// Serialize frame to Writer.
|
// Serialize frame to Writer.
|
||||||
if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
|
if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err = binary.Write(f.w, binary.BigEndian, uint32(len(frame.FlagIdValues))); err != nil {
|
n := len(frame.FlagIdValues)
|
||||||
|
if uint64(n) > math.MaxUint32 {
|
||||||
|
return &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
|
if err = binary.Write(f.w, binary.BigEndian, uint32(n)); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, flagIdValue := range frame.FlagIdValues {
|
for _, flagIdValue := range frame.FlagIdValues {
|
||||||
@@ -170,29 +163,41 @@ func writeControlFrameHeader(w io.Writer, h ControlFrameHeader) error {
|
|||||||
|
|
||||||
func writeHeaderValueBlock(w io.Writer, h http.Header) (n int, err error) {
|
func writeHeaderValueBlock(w io.Writer, h http.Header) (n int, err error) {
|
||||||
n = 0
|
n = 0
|
||||||
if err = binary.Write(w, binary.BigEndian, uint32(len(h))); err != nil {
|
numHeaders := len(h)
|
||||||
|
if numHeaders > math.MaxInt32 {
|
||||||
|
return n, &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
|
if err = binary.Write(w, binary.BigEndian, uint32(numHeaders)); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n += 2
|
n += 4
|
||||||
for name, values := range h {
|
for name, values := range h {
|
||||||
if err = binary.Write(w, binary.BigEndian, uint32(len(name))); err != nil {
|
nameLen := len(name)
|
||||||
|
if nameLen > math.MaxInt32 {
|
||||||
|
return n, &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
|
if err = binary.Write(w, binary.BigEndian, uint32(nameLen)); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n += 2
|
n += 4
|
||||||
name = strings.ToLower(name)
|
name = strings.ToLower(name)
|
||||||
if _, err = io.WriteString(w, name); err != nil {
|
if _, err = io.WriteString(w, name); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n += len(name)
|
n += nameLen
|
||||||
v := strings.Join(values, headerValueSeparator)
|
v := strings.Join(values, headerValueSeparator)
|
||||||
if err = binary.Write(w, binary.BigEndian, uint32(len(v))); err != nil {
|
vLen := len(v)
|
||||||
|
if vLen > math.MaxInt32 {
|
||||||
|
return n, &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
|
if err = binary.Write(w, binary.BigEndian, uint32(vLen)); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n += 2
|
n += 4
|
||||||
if _, err = io.WriteString(w, v); err != nil {
|
if _, err = io.WriteString(w, v); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
n += len(v)
|
n += vLen
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -216,7 +221,11 @@ func (f *Framer) writeSynStreamFrame(frame *SynStreamFrame) (err error) {
|
|||||||
// Set ControlFrameHeader.
|
// Set ControlFrameHeader.
|
||||||
frame.CFHeader.version = Version
|
frame.CFHeader.version = Version
|
||||||
frame.CFHeader.frameType = TypeSynStream
|
frame.CFHeader.frameType = TypeSynStream
|
||||||
frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 10)
|
hLen := len(f.headerBuf.Bytes()) + 10
|
||||||
|
if hLen > MaxDataLength {
|
||||||
|
return &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
|
frame.CFHeader.length = uint32(hLen)
|
||||||
|
|
||||||
// Serialize frame to Writer.
|
// Serialize frame to Writer.
|
||||||
if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
|
if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
|
||||||
@@ -260,7 +269,11 @@ func (f *Framer) writeSynReplyFrame(frame *SynReplyFrame) (err error) {
|
|||||||
// Set ControlFrameHeader.
|
// Set ControlFrameHeader.
|
||||||
frame.CFHeader.version = Version
|
frame.CFHeader.version = Version
|
||||||
frame.CFHeader.frameType = TypeSynReply
|
frame.CFHeader.frameType = TypeSynReply
|
||||||
frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 4)
|
hLen := len(f.headerBuf.Bytes()) + 4
|
||||||
|
if hLen > MaxDataLength {
|
||||||
|
return &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
|
frame.CFHeader.length = uint32(hLen)
|
||||||
|
|
||||||
// Serialize frame to Writer.
|
// Serialize frame to Writer.
|
||||||
if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
|
if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
|
||||||
@@ -295,7 +308,11 @@ func (f *Framer) writeHeadersFrame(frame *HeadersFrame) (err error) {
|
|||||||
// Set ControlFrameHeader.
|
// Set ControlFrameHeader.
|
||||||
frame.CFHeader.version = Version
|
frame.CFHeader.version = Version
|
||||||
frame.CFHeader.frameType = TypeHeaders
|
frame.CFHeader.frameType = TypeHeaders
|
||||||
frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 4)
|
hLen := len(f.headerBuf.Bytes()) + 4
|
||||||
|
if hLen > MaxDataLength {
|
||||||
|
return &Error{InvalidControlFrame, 0}
|
||||||
|
}
|
||||||
|
frame.CFHeader.length = uint32(hLen)
|
||||||
|
|
||||||
// Serialize frame to Writer.
|
// Serialize frame to Writer.
|
||||||
if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
|
if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
|
||||||
@@ -323,7 +340,11 @@ func (f *Framer) writeDataFrame(frame *DataFrame) (err error) {
|
|||||||
if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil {
|
if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
flagsAndLength := uint32(frame.Flags)<<24 | uint32(len(frame.Data))
|
dLen := len(frame.Data)
|
||||||
|
if dLen > MaxDataLength {
|
||||||
|
return &Error{InvalidDataFrame, frame.StreamId}
|
||||||
|
}
|
||||||
|
flagsAndLength := uint32(frame.Flags)<<24 | uint32(dLen)
|
||||||
if err = binary.Write(f.w, binary.BigEndian, flagsAndLength); err != nil {
|
if err = binary.Write(f.w, binary.BigEndian, flagsAndLength); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+4
-4
@@ -798,7 +798,7 @@ github.com/moby/policy-helpers/image
|
|||||||
github.com/moby/policy-helpers/roots
|
github.com/moby/policy-helpers/roots
|
||||||
github.com/moby/policy-helpers/roots/dhi
|
github.com/moby/policy-helpers/roots/dhi
|
||||||
github.com/moby/policy-helpers/types
|
github.com/moby/policy-helpers/types
|
||||||
# github.com/moby/spdystream v0.5.0
|
# github.com/moby/spdystream v0.5.1
|
||||||
## explicit; go 1.13
|
## explicit; go 1.13
|
||||||
github.com/moby/spdystream
|
github.com/moby/spdystream
|
||||||
github.com/moby/spdystream/spdy
|
github.com/moby/spdystream/spdy
|
||||||
@@ -1531,11 +1531,11 @@ gopkg.in/inf.v0
|
|||||||
# gopkg.in/yaml.v3 v3.0.1
|
# gopkg.in/yaml.v3 v3.0.1
|
||||||
## explicit
|
## explicit
|
||||||
gopkg.in/yaml.v3
|
gopkg.in/yaml.v3
|
||||||
# k8s.io/api v0.35.2
|
# k8s.io/api v0.35.4
|
||||||
## explicit; go 1.25.0
|
## explicit; go 1.25.0
|
||||||
k8s.io/api/apps/v1
|
k8s.io/api/apps/v1
|
||||||
k8s.io/api/core/v1
|
k8s.io/api/core/v1
|
||||||
# k8s.io/apimachinery v0.35.2
|
# k8s.io/apimachinery v0.35.4
|
||||||
## explicit; go 1.25.0
|
## explicit; go 1.25.0
|
||||||
k8s.io/apimachinery/pkg/api/errors
|
k8s.io/apimachinery/pkg/api/errors
|
||||||
k8s.io/apimachinery/pkg/api/meta
|
k8s.io/apimachinery/pkg/api/meta
|
||||||
@@ -1586,7 +1586,7 @@ k8s.io/apimachinery/pkg/version
|
|||||||
k8s.io/apimachinery/pkg/watch
|
k8s.io/apimachinery/pkg/watch
|
||||||
k8s.io/apimachinery/third_party/forked/golang/netutil
|
k8s.io/apimachinery/third_party/forked/golang/netutil
|
||||||
k8s.io/apimachinery/third_party/forked/golang/reflect
|
k8s.io/apimachinery/third_party/forked/golang/reflect
|
||||||
# k8s.io/client-go v0.35.2
|
# k8s.io/client-go v0.35.4
|
||||||
## explicit; go 1.25.0
|
## explicit; go 1.25.0
|
||||||
k8s.io/client-go/features
|
k8s.io/client-go/features
|
||||||
k8s.io/client-go/pkg/apis/clientauthentication
|
k8s.io/client-go/pkg/apis/clientauthentication
|
||||||
|
|||||||
Reference in New Issue
Block a user