mirror of https://github.com/docker/cli.git
vendor: golang.org/x/net v0.7.0
full diff: https://github.com/golang/net/compare/v0.5.0...v0.7.0 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
3a0d492d1c
commit
d213548bd0
|
@ -70,7 +70,7 @@ require (
|
||||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||||
go.etcd.io/etcd/raft/v3 v3.5.6 // indirect
|
go.etcd.io/etcd/raft/v3 v3.5.6 // indirect
|
||||||
golang.org/x/crypto v0.2.0 // indirect
|
golang.org/x/crypto v0.2.0 // indirect
|
||||||
golang.org/x/net v0.5.0 // indirect
|
golang.org/x/net v0.7.0 // indirect
|
||||||
golang.org/x/time v0.3.0 // indirect
|
golang.org/x/time v0.3.0 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20220706185917-7780775163c4 // indirect
|
google.golang.org/genproto v0.0.0-20220706185917-7780775163c4 // indirect
|
||||||
google.golang.org/grpc v1.48.0 // indirect
|
google.golang.org/grpc v1.48.0 // indirect
|
||||||
|
|
|
@ -505,8 +505,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
|
||||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
|
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
||||||
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
|
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
|
|
@ -18,7 +18,7 @@ type inflow struct {
|
||||||
unsent int32
|
unsent int32
|
||||||
}
|
}
|
||||||
|
|
||||||
// set sets the initial window.
|
// init sets the initial window.
|
||||||
func (f *inflow) init(n int32) {
|
func (f *inflow) init(n int32) {
|
||||||
f.avail = n
|
f.avail = n
|
||||||
}
|
}
|
||||||
|
|
|
@ -662,6 +662,15 @@ func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error {
|
||||||
// It is the caller's responsibility not to violate the maximum frame size
|
// It is the caller's responsibility not to violate the maximum frame size
|
||||||
// and to not call other Write methods concurrently.
|
// and to not call other Write methods concurrently.
|
||||||
func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {
|
func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {
|
||||||
|
if err := f.startWriteDataPadded(streamID, endStream, data, pad); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return f.endWrite()
|
||||||
|
}
|
||||||
|
|
||||||
|
// startWriteDataPadded is WriteDataPadded, but only writes the frame to the Framer's internal buffer.
|
||||||
|
// The caller should call endWrite to flush the frame to the underlying writer.
|
||||||
|
func (f *Framer) startWriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {
|
||||||
if !validStreamID(streamID) && !f.AllowIllegalWrites {
|
if !validStreamID(streamID) && !f.AllowIllegalWrites {
|
||||||
return errStreamID
|
return errStreamID
|
||||||
}
|
}
|
||||||
|
@ -691,7 +700,7 @@ func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []by
|
||||||
}
|
}
|
||||||
f.wbuf = append(f.wbuf, data...)
|
f.wbuf = append(f.wbuf, data...)
|
||||||
f.wbuf = append(f.wbuf, pad...)
|
f.wbuf = append(f.wbuf, pad...)
|
||||||
return f.endWrite()
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// A SettingsFrame conveys configuration parameters that affect how
|
// A SettingsFrame conveys configuration parameters that affect how
|
||||||
|
|
|
@ -211,7 +211,7 @@ func (d *Decoder) at(i uint64) (hf HeaderField, ok bool) {
|
||||||
return dt.ents[dt.len()-(int(i)-staticTable.len())], true
|
return dt.ents[dt.len()-(int(i)-staticTable.len())], true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decode decodes an entire block.
|
// DecodeFull decodes an entire block.
|
||||||
//
|
//
|
||||||
// TODO: remove this method and make it incremental later? This is
|
// TODO: remove this method and make it incremental later? This is
|
||||||
// easier for debugging now.
|
// easier for debugging now.
|
||||||
|
@ -359,6 +359,7 @@ func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error {
|
||||||
|
|
||||||
var hf HeaderField
|
var hf HeaderField
|
||||||
wantStr := d.emitEnabled || it.indexed()
|
wantStr := d.emitEnabled || it.indexed()
|
||||||
|
var undecodedName undecodedString
|
||||||
if nameIdx > 0 {
|
if nameIdx > 0 {
|
||||||
ihf, ok := d.at(nameIdx)
|
ihf, ok := d.at(nameIdx)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -366,15 +367,27 @@ func (d *Decoder) parseFieldLiteral(n uint8, it indexType) error {
|
||||||
}
|
}
|
||||||
hf.Name = ihf.Name
|
hf.Name = ihf.Name
|
||||||
} else {
|
} else {
|
||||||
hf.Name, buf, err = d.readString(buf, wantStr)
|
undecodedName, buf, err = d.readString(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hf.Value, buf, err = d.readString(buf, wantStr)
|
undecodedValue, buf, err := d.readString(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if wantStr {
|
||||||
|
if nameIdx <= 0 {
|
||||||
|
hf.Name, err = d.decodeString(undecodedName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hf.Value, err = d.decodeString(undecodedValue)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
d.buf = buf
|
d.buf = buf
|
||||||
if it.indexed() {
|
if it.indexed() {
|
||||||
d.dynTab.add(hf)
|
d.dynTab.add(hf)
|
||||||
|
@ -459,46 +472,52 @@ func readVarInt(n byte, p []byte) (i uint64, remain []byte, err error) {
|
||||||
return 0, origP, errNeedMore
|
return 0, origP, errNeedMore
|
||||||
}
|
}
|
||||||
|
|
||||||
// readString decodes an hpack string from p.
|
// readString reads an hpack string from p.
|
||||||
//
|
//
|
||||||
// wantStr is whether s will be used. If false, decompression and
|
// It returns a reference to the encoded string data to permit deferring decode costs
|
||||||
// []byte->string garbage are skipped if s will be ignored
|
// until after the caller verifies all data is present.
|
||||||
// anyway. This does mean that huffman decoding errors for non-indexed
|
func (d *Decoder) readString(p []byte) (u undecodedString, remain []byte, err error) {
|
||||||
// strings past the MAX_HEADER_LIST_SIZE are ignored, but the server
|
|
||||||
// is returning an error anyway, and because they're not indexed, the error
|
|
||||||
// won't affect the decoding state.
|
|
||||||
func (d *Decoder) readString(p []byte, wantStr bool) (s string, remain []byte, err error) {
|
|
||||||
if len(p) == 0 {
|
if len(p) == 0 {
|
||||||
return "", p, errNeedMore
|
return u, p, errNeedMore
|
||||||
}
|
}
|
||||||
isHuff := p[0]&128 != 0
|
isHuff := p[0]&128 != 0
|
||||||
strLen, p, err := readVarInt(7, p)
|
strLen, p, err := readVarInt(7, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", p, err
|
return u, p, err
|
||||||
}
|
}
|
||||||
if d.maxStrLen != 0 && strLen > uint64(d.maxStrLen) {
|
if d.maxStrLen != 0 && strLen > uint64(d.maxStrLen) {
|
||||||
return "", nil, ErrStringLength
|
// Returning an error here means Huffman decoding errors
|
||||||
|
// for non-indexed strings past the maximum string length
|
||||||
|
// are ignored, but the server is returning an error anyway
|
||||||
|
// and because the string is not indexed the error will not
|
||||||
|
// affect the decoding state.
|
||||||
|
return u, nil, ErrStringLength
|
||||||
}
|
}
|
||||||
if uint64(len(p)) < strLen {
|
if uint64(len(p)) < strLen {
|
||||||
return "", p, errNeedMore
|
return u, p, errNeedMore
|
||||||
}
|
}
|
||||||
if !isHuff {
|
u.isHuff = isHuff
|
||||||
if wantStr {
|
u.b = p[:strLen]
|
||||||
s = string(p[:strLen])
|
return u, p[strLen:], nil
|
||||||
}
|
|
||||||
return s, p[strLen:], nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if wantStr {
|
type undecodedString struct {
|
||||||
|
isHuff bool
|
||||||
|
b []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Decoder) decodeString(u undecodedString) (string, error) {
|
||||||
|
if !u.isHuff {
|
||||||
|
return string(u.b), nil
|
||||||
|
}
|
||||||
buf := bufPool.Get().(*bytes.Buffer)
|
buf := bufPool.Get().(*bytes.Buffer)
|
||||||
buf.Reset() // don't trust others
|
buf.Reset() // don't trust others
|
||||||
defer bufPool.Put(buf)
|
var s string
|
||||||
if err := huffmanDecode(buf, d.maxStrLen, p[:strLen]); err != nil {
|
err := huffmanDecode(buf, d.maxStrLen, u.b)
|
||||||
buf.Reset()
|
if err == nil {
|
||||||
return "", nil, err
|
|
||||||
}
|
|
||||||
s = buf.String()
|
s = buf.String()
|
||||||
|
}
|
||||||
buf.Reset() // be nice to GC
|
buf.Reset() // be nice to GC
|
||||||
}
|
bufPool.Put(buf)
|
||||||
return s, p[strLen:], nil
|
return s, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -843,8 +843,13 @@ type frameWriteResult struct {
|
||||||
// and then reports when it's done.
|
// and then reports when it's done.
|
||||||
// At most one goroutine can be running writeFrameAsync at a time per
|
// At most one goroutine can be running writeFrameAsync at a time per
|
||||||
// serverConn.
|
// serverConn.
|
||||||
func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) {
|
func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest, wd *writeData) {
|
||||||
err := wr.write.writeFrame(sc)
|
var err error
|
||||||
|
if wd == nil {
|
||||||
|
err = wr.write.writeFrame(sc)
|
||||||
|
} else {
|
||||||
|
err = sc.framer.endWrite()
|
||||||
|
}
|
||||||
sc.wroteFrameCh <- frameWriteResult{wr: wr, err: err}
|
sc.wroteFrameCh <- frameWriteResult{wr: wr, err: err}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1251,9 +1256,16 @@ func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) {
|
||||||
sc.writingFrameAsync = false
|
sc.writingFrameAsync = false
|
||||||
err := wr.write.writeFrame(sc)
|
err := wr.write.writeFrame(sc)
|
||||||
sc.wroteFrame(frameWriteResult{wr: wr, err: err})
|
sc.wroteFrame(frameWriteResult{wr: wr, err: err})
|
||||||
|
} else if wd, ok := wr.write.(*writeData); ok {
|
||||||
|
// Encode the frame in the serve goroutine, to ensure we don't have
|
||||||
|
// any lingering asynchronous references to data passed to Write.
|
||||||
|
// See https://go.dev/issue/58446.
|
||||||
|
sc.framer.startWriteDataPadded(wd.streamID, wd.endStream, wd.p, nil)
|
||||||
|
sc.writingFrameAsync = true
|
||||||
|
go sc.writeFrameAsync(wr, wd)
|
||||||
} else {
|
} else {
|
||||||
sc.writingFrameAsync = true
|
sc.writingFrameAsync = true
|
||||||
go sc.writeFrameAsync(wr)
|
go sc.writeFrameAsync(wr, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2192,7 +2204,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
|
||||||
tlsState = sc.tlsState
|
tlsState = sc.tlsState
|
||||||
}
|
}
|
||||||
|
|
||||||
needsContinue := rp.header.Get("Expect") == "100-continue"
|
needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue")
|
||||||
if needsContinue {
|
if needsContinue {
|
||||||
rp.header.Del("Expect")
|
rp.header.Del("Expect")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1569,7 +1569,7 @@ func (cs *clientStream) cleanupWriteRequest(err error) {
|
||||||
close(cs.donec)
|
close(cs.donec)
|
||||||
}
|
}
|
||||||
|
|
||||||
// awaitOpenSlotForStream waits until len(streams) < maxConcurrentStreams.
|
// awaitOpenSlotForStreamLocked waits until len(streams) < maxConcurrentStreams.
|
||||||
// Must hold cc.mu.
|
// Must hold cc.mu.
|
||||||
func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error {
|
func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error {
|
||||||
for {
|
for {
|
||||||
|
|
|
@ -32,7 +32,7 @@ type histogram struct {
|
||||||
valueCount int64 // number of values recorded for single value
|
valueCount int64 // number of values recorded for single value
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddMeasurement records a value measurement observation to the histogram.
|
// addMeasurement records a value measurement observation to the histogram.
|
||||||
func (h *histogram) addMeasurement(value int64) {
|
func (h *histogram) addMeasurement(value int64) {
|
||||||
// TODO: assert invariant
|
// TODO: assert invariant
|
||||||
h.sum += value
|
h.sum += value
|
||||||
|
|
|
@ -266,7 +266,7 @@ go.etcd.io/etcd/raft/v3/raftpb
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/crypto/ed25519
|
golang.org/x/crypto/ed25519
|
||||||
golang.org/x/crypto/pbkdf2
|
golang.org/x/crypto/pbkdf2
|
||||||
# golang.org/x/net v0.5.0
|
# golang.org/x/net v0.7.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/net/http/httpguts
|
golang.org/x/net/http/httpguts
|
||||||
golang.org/x/net/http2
|
golang.org/x/net/http2
|
||||||
|
|
Loading…
Reference in New Issue