diff options
Diffstat (limited to 'vendor')
| -rw-r--r-- | vendor/github.com/miekg/dns/README.md | 3 | ||||
| -rw-r--r-- | vendor/github.com/miekg/dns/scan_rr.go | 38 | ||||
| -rw-r--r-- | vendor/github.com/miekg/dns/server.go | 19 | ||||
| -rw-r--r-- | vendor/github.com/miekg/dns/svcb.go | 50 | ||||
| -rw-r--r-- | vendor/github.com/miekg/dns/xfr.go | 1 | ||||
| -rw-r--r-- | vendor/golang.org/x/mod/module/module.go | 2 | ||||
| -rw-r--r-- | vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go | 1 | ||||
| -rw-r--r-- | vendor/golang.org/x/tools/go/packages/doc.go | 8 | ||||
| -rw-r--r-- | vendor/golang.org/x/tools/go/packages/external.go | 22 | ||||
| -rw-r--r-- | vendor/golang.org/x/tools/go/packages/golist.go | 82 | ||||
| -rw-r--r-- | vendor/golang.org/x/tools/go/packages/packages.go | 95 | ||||
| -rw-r--r-- | vendor/golang.org/x/tools/internal/gocommand/invoke.go | 96 | ||||
| -rw-r--r-- | vendor/golang.org/x/tools/internal/imports/fix.go | 28 | ||||
| -rw-r--r-- | vendor/golang.org/x/tools/internal/versions/types_go122.go | 2 | ||||
| -rw-r--r-- | vendor/modules.txt | 6 | 
15 files changed, 302 insertions, 151 deletions
| diff --git a/vendor/github.com/miekg/dns/README.md b/vendor/github.com/miekg/dns/README.md index 58275db3b..10ddda142 100644 --- a/vendor/github.com/miekg/dns/README.md +++ b/vendor/github.com/miekg/dns/README.md @@ -188,6 +188,9 @@ Example programs can be found in the `github.com/miekg/exdns` repository.  * 8777 - DNS Reverse IP Automatic Multicast Tunneling (AMT) Discovery  * 8914 - Extended DNS Errors  * 8976 - Message Digest for DNS Zones (ZONEMD RR) +* 9460 - Service Binding and Parameter Specification via the DNS +* 9461 - Service Binding Mapping for DNS Servers +* 9462 - Discovery of Designated Resolvers  ## Loosely Based Upon diff --git a/vendor/github.com/miekg/dns/scan_rr.go b/vendor/github.com/miekg/dns/scan_rr.go index 7d1ade7d8..c1a76995e 100644 --- a/vendor/github.com/miekg/dns/scan_rr.go +++ b/vendor/github.com/miekg/dns/scan_rr.go @@ -55,7 +55,10 @@ func endingToTxtSlice(c *zlexer, errstr string) ([]string, *ParseError) {  			sx := []string{}  			p := 0  			for { -				i := escapedStringOffset(l.token[p:], 255) +				i, ok := escapedStringOffset(l.token[p:], 255) +				if !ok { +					return nil, &ParseError{err: errstr, lex: l} +				}  				if i != -1 && p+i != len(l.token) {  					sx = append(sx, l.token[p:p+i])  				} else { @@ -1919,29 +1922,36 @@ func (rr *APL) parse(c *zlexer, o string) *ParseError {  // escapedStringOffset finds the offset within a string (which may contain escape  // sequences) that corresponds to a certain byte offset. If the input offset is -// out of bounds, -1 is returned. -func escapedStringOffset(s string, byteOffset int) int { -	if byteOffset == 0 { -		return 0 +// out of bounds, -1 is returned (which is *not* considered an error). +func escapedStringOffset(s string, desiredByteOffset int) (int, bool) { +	if desiredByteOffset == 0 { +		return 0, true  	} -	offset := 0 -	for i := 0; i < len(s); i++ { -		offset += 1 +	currentByteOffset, i := 0, 0 + +	for i < len(s) { +		currentByteOffset += 1  		// Skip escape sequences  		if s[i] != '\\' { -			// Not an escape sequence; nothing to do. +			// Single plain byte, not an escape sequence. +			i++  		} else if isDDD(s[i+1:]) { -			i += 3 +			// Skip backslash and DDD. +			i += 4 +		} else if len(s[i+1:]) < 1 { +			// No character following the backslash; that's an error. +			return 0, false  		} else { -			i++ +			// Skip backslash and following byte. +			i += 2  		} -		if offset >= byteOffset { -			return i + 1 +		if currentByteOffset >= desiredByteOffset { +			return i, true  		}  	} -	return -1 +	return -1, true  } diff --git a/vendor/github.com/miekg/dns/server.go b/vendor/github.com/miekg/dns/server.go index 0207d6da2..81580d1e5 100644 --- a/vendor/github.com/miekg/dns/server.go +++ b/vendor/github.com/miekg/dns/server.go @@ -188,6 +188,14 @@ type DecorateReader func(Reader) Reader  // Implementations should never return a nil Writer.  type DecorateWriter func(Writer) Writer +// MsgInvalidFunc is a listener hook for observing incoming messages that were discarded +// because they could not be parsed. +// Every message that is read by a Reader will eventually be provided to the Handler, +// rejected (or ignored) by the MsgAcceptFunc, or passed to this function. +type MsgInvalidFunc func(m []byte, err error) + +func DefaultMsgInvalidFunc(m []byte, err error) {} +  // A Server defines parameters for running an DNS server.  type Server struct {  	// Address to listen on, ":dns" if empty. @@ -233,6 +241,8 @@ type Server struct {  	// AcceptMsgFunc will check the incoming message and will reject it early in the process.  	// By default DefaultMsgAcceptFunc will be used.  	MsgAcceptFunc MsgAcceptFunc +	// MsgInvalidFunc is optional, will be called if a message is received but cannot be parsed. +	MsgInvalidFunc MsgInvalidFunc  	// Shutdown handling  	lock     sync.RWMutex @@ -277,6 +287,9 @@ func (srv *Server) init() {  	if srv.MsgAcceptFunc == nil {  		srv.MsgAcceptFunc = DefaultMsgAcceptFunc  	} +	if srv.MsgInvalidFunc == nil { +		srv.MsgInvalidFunc = DefaultMsgInvalidFunc +	}  	if srv.Handler == nil {  		srv.Handler = DefaultServeMux  	} @@ -531,6 +544,7 @@ func (srv *Server) serveUDP(l net.PacketConn) error {  			if cap(m) == srv.UDPSize {  				srv.udpPool.Put(m[:srv.UDPSize])  			} +			srv.MsgInvalidFunc(m, ErrShortRead)  			continue  		}  		wg.Add(1) @@ -611,6 +625,7 @@ func (srv *Server) serveUDPPacket(wg *sync.WaitGroup, m []byte, u net.PacketConn  func (srv *Server) serveDNS(m []byte, w *response) {  	dh, off, err := unpackMsgHdr(m, 0)  	if err != nil { +		srv.MsgInvalidFunc(m, err)  		// Let client hang, they are sending crap; any reply can be used to amplify.  		return  	} @@ -620,10 +635,12 @@ func (srv *Server) serveDNS(m []byte, w *response) {  	switch action := srv.MsgAcceptFunc(dh); action {  	case MsgAccept: -		if req.unpack(dh, m, off) == nil { +		err := req.unpack(dh, m, off) +		if err == nil {  			break  		} +		srv.MsgInvalidFunc(m, err)  		fallthrough  	case MsgReject, MsgRejectNotImplemented:  		opcode := req.Opcode diff --git a/vendor/github.com/miekg/dns/svcb.go b/vendor/github.com/miekg/dns/svcb.go index c1a740b68..310c7d11f 100644 --- a/vendor/github.com/miekg/dns/svcb.go +++ b/vendor/github.com/miekg/dns/svcb.go @@ -14,7 +14,7 @@ import (  // SVCBKey is the type of the keys used in the SVCB RR.  type SVCBKey uint16 -// Keys defined in draft-ietf-dnsop-svcb-https-08 Section 14.3.2. +// Keys defined in rfc9460  const (  	SVCB_MANDATORY SVCBKey = iota  	SVCB_ALPN @@ -23,7 +23,8 @@ const (  	SVCB_IPV4HINT  	SVCB_ECHCONFIG  	SVCB_IPV6HINT -	SVCB_DOHPATH // draft-ietf-add-svcb-dns-02 Section 9 +	SVCB_DOHPATH // rfc9461 Section 5 +	SVCB_OHTTP   // rfc9540 Section 8  	svcb_RESERVED SVCBKey = 65535  ) @@ -37,6 +38,7 @@ var svcbKeyToStringMap = map[SVCBKey]string{  	SVCB_ECHCONFIG:       "ech",  	SVCB_IPV6HINT:        "ipv6hint",  	SVCB_DOHPATH:         "dohpath", +	SVCB_OHTTP:           "ohttp",  }  var svcbStringToKeyMap = reverseSVCBKeyMap(svcbKeyToStringMap) @@ -201,6 +203,8 @@ func makeSVCBKeyValue(key SVCBKey) SVCBKeyValue {  		return new(SVCBIPv6Hint)  	case SVCB_DOHPATH:  		return new(SVCBDoHPath) +	case SVCB_OHTTP: +		return new(SVCBOhttp)  	case svcb_RESERVED:  		return nil  	default: @@ -771,8 +775,8 @@ func (s *SVCBIPv6Hint) copy() SVCBKeyValue {  // SVCBDoHPath pair is used to indicate the URI template that the  // clients may use to construct a DNS over HTTPS URI.  // -// See RFC xxxx (https://datatracker.ietf.org/doc/html/draft-ietf-add-svcb-dns-02) -// and RFC yyyy (https://datatracker.ietf.org/doc/html/draft-ietf-add-ddr-06). +// See RFC 9461 (https://datatracker.ietf.org/doc/html/rfc9461) +// and RFC 9462 (https://datatracker.ietf.org/doc/html/rfc9462).  //  // A basic example of using the dohpath option together with the alpn  // option to indicate support for DNS over HTTPS on a certain path: @@ -816,6 +820,44 @@ func (s *SVCBDoHPath) copy() SVCBKeyValue {  	}  } +// The "ohttp" SvcParamKey is used to indicate that a service described in a SVCB RR +// can be accessed as a target using an associated gateway. +// Both the presentation and wire-format values for the "ohttp" parameter MUST be empty. +// +// See RFC 9460 (https://datatracker.ietf.org/doc/html/rfc9460/) +// and RFC 9230 (https://datatracker.ietf.org/doc/html/rfc9230/) +// +// A basic example of using the dohpath option together with the alpn +// option to indicate support for DNS over HTTPS on a certain path: +// +//	s := new(dns.SVCB) +//	s.Hdr = dns.RR_Header{Name: ".", Rrtype: dns.TypeSVCB, Class: dns.ClassINET} +//	e := new(dns.SVCBAlpn) +//	e.Alpn = []string{"h2", "h3"} +//	p := new(dns.SVCBOhttp) +//	s.Value = append(s.Value, e, p) +type SVCBOhttp struct{} + +func (*SVCBOhttp) Key() SVCBKey          { return SVCB_OHTTP } +func (*SVCBOhttp) copy() SVCBKeyValue    { return &SVCBOhttp{} } +func (*SVCBOhttp) pack() ([]byte, error) { return []byte{}, nil } +func (*SVCBOhttp) String() string        { return "" } +func (*SVCBOhttp) len() int              { return 0 } + +func (*SVCBOhttp) unpack(b []byte) error { +	if len(b) != 0 { +		return errors.New("dns: svcbotthp: svcbotthp must have no value") +	} +	return nil +} + +func (*SVCBOhttp) parse(b string) error { +	if b != "" { +		return errors.New("dns: svcbotthp: svcbotthp must have no value") +	} +	return nil +} +  // SVCBLocal pair is intended for experimental/private use. The key is recommended  // to be in the range [SVCB_PRIVATE_LOWER, SVCB_PRIVATE_UPPER].  // Basic use pattern for creating a keyNNNNN option: diff --git a/vendor/github.com/miekg/dns/xfr.go b/vendor/github.com/miekg/dns/xfr.go index 2187c456d..5cfbb516a 100644 --- a/vendor/github.com/miekg/dns/xfr.go +++ b/vendor/github.com/miekg/dns/xfr.go @@ -209,6 +209,7 @@ func (t *Transfer) inIxfr(q *Msg, c chan *Envelope) {  //	ch := make(chan *dns.Envelope)  //	tr := new(dns.Transfer)  //	var wg sync.WaitGroup +//	wg.Add(1)  //	go func() {  //		tr.Out(w, r, ch)  //		wg.Done() diff --git a/vendor/golang.org/x/mod/module/module.go b/vendor/golang.org/x/mod/module/module.go index 2a364b229..cac1a899e 100644 --- a/vendor/golang.org/x/mod/module/module.go +++ b/vendor/golang.org/x/mod/module/module.go @@ -506,6 +506,7 @@ var badWindowsNames = []string{  	"PRN",  	"AUX",  	"NUL", +	"COM0",  	"COM1",  	"COM2",  	"COM3", @@ -515,6 +516,7 @@ var badWindowsNames = []string{  	"COM7",  	"COM8",  	"COM9", +	"LPT0",  	"LPT1",  	"LPT2",  	"LPT3", diff --git a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go index 333676b7c..c6e7c0d44 100644 --- a/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go +++ b/vendor/golang.org/x/tools/go/internal/packagesdriver/sizes.go @@ -13,6 +13,7 @@ import (  	"golang.org/x/tools/internal/gocommand"  ) +// TODO(adonovan): move back into go/packages.  func GetSizesForArgsGolist(ctx context.Context, inv gocommand.Invocation, gocmdRunner *gocommand.Runner) (string, string, error) {  	inv.Verb = "list"  	inv.Args = []string{"-f", "{{context.GOARCH}} {{context.Compiler}}", "--", "unsafe"} diff --git a/vendor/golang.org/x/tools/go/packages/doc.go b/vendor/golang.org/x/tools/go/packages/doc.go index a8d7b06ac..3531ac8f5 100644 --- a/vendor/golang.org/x/tools/go/packages/doc.go +++ b/vendor/golang.org/x/tools/go/packages/doc.go @@ -198,14 +198,6 @@ Instead, ssadump no longer requests the runtime package,  but seeks it among the dependencies of the user-specified packages,  and emits an error if it is not found. -Overlays: The Overlay field in the Config allows providing alternate contents -for Go source files, by providing a mapping from file path to contents. -go/packages will pull in new imports added in overlay files when go/packages -is run in LoadImports mode or greater. -Overlay support for the go list driver isn't complete yet: if the file doesn't -exist on disk, it will only be recognized in an overlay if it is a non-test file -and the package would be reported even without the overlay. -  Questions & Tasks  - Add GOARCH/GOOS? diff --git a/vendor/golang.org/x/tools/go/packages/external.go b/vendor/golang.org/x/tools/go/packages/external.go index 4335c1eb1..c2b4b711b 100644 --- a/vendor/golang.org/x/tools/go/packages/external.go +++ b/vendor/golang.org/x/tools/go/packages/external.go @@ -34,8 +34,8 @@ type DriverRequest struct {  	// Tests specifies whether the patterns should also return test packages.  	Tests bool `json:"tests"` -	// Overlay maps file paths (relative to the driver's working directory) to the byte contents -	// of overlay files. +	// Overlay maps file paths (relative to the driver's working directory) +	// to the contents of overlay files (see Config.Overlay).  	Overlay map[string][]byte `json:"overlay"`  } @@ -119,7 +119,19 @@ func findExternalDriver(cfg *Config) driver {  		stderr := new(bytes.Buffer)  		cmd := exec.CommandContext(cfg.Context, tool, words...)  		cmd.Dir = cfg.Dir -		cmd.Env = cfg.Env +		// The cwd gets resolved to the real path. On Darwin, where +		// /tmp is a symlink, this breaks anything that expects the +		// working directory to keep the original path, including the +		// go command when dealing with modules. +		// +		// os.Getwd stdlib has a special feature where if the +		// cwd and the PWD are the same node then it trusts +		// the PWD, so by setting it in the env for the child +		// process we fix up all the paths returned by the go +		// command. +		// +		// (See similar trick in Invocation.run in ../../internal/gocommand/invoke.go) +		cmd.Env = append(slicesClip(cfg.Env), "PWD="+cfg.Dir)  		cmd.Stdin = bytes.NewReader(req)  		cmd.Stdout = buf  		cmd.Stderr = stderr @@ -138,3 +150,7 @@ func findExternalDriver(cfg *Config) driver {  		return &response, nil  	}  } + +// slicesClip removes unused capacity from the slice, returning s[:len(s):len(s)]. +// TODO(adonovan): use go1.21 slices.Clip. +func slicesClip[S ~[]E, E any](s S) S { return s[:len(s):len(s)] } diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go index 22305d9c9..d9be410aa 100644 --- a/vendor/golang.org/x/tools/go/packages/golist.go +++ b/vendor/golang.org/x/tools/go/packages/golist.go @@ -841,6 +841,7 @@ func (state *golistState) cfgInvocation() gocommand.Invocation {  		Env:        cfg.Env,  		Logf:       cfg.Logf,  		WorkingDir: cfg.Dir, +		Overlay:    cfg.goListOverlayFile,  	}  } @@ -849,26 +850,6 @@ func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer,  	cfg := state.cfg  	inv := state.cfgInvocation() - -	// For Go versions 1.16 and above, `go list` accepts overlays directly via -	// the -overlay flag. Set it, if it's available. -	// -	// The check for "list" is not necessarily required, but we should avoid -	// getting the go version if possible. -	if verb == "list" { -		goVersion, err := state.getGoVersion() -		if err != nil { -			return nil, err -		} -		if goVersion >= 16 { -			filename, cleanup, err := state.writeOverlays() -			if err != nil { -				return nil, err -			} -			defer cleanup() -			inv.Overlay = filename -		} -	}  	inv.Verb = verb  	inv.Args = args  	gocmdRunner := cfg.gocmdRunner @@ -1015,67 +996,6 @@ func (state *golistState) invokeGo(verb string, args ...string) (*bytes.Buffer,  	return stdout, nil  } -// OverlayJSON is the format overlay files are expected to be in. -// The Replace map maps from overlaid paths to replacement paths: -// the Go command will forward all reads trying to open -// each overlaid path to its replacement path, or consider the overlaid -// path not to exist if the replacement path is empty. -// -// From golang/go#39958. -type OverlayJSON struct { -	Replace map[string]string `json:"replace,omitempty"` -} - -// writeOverlays writes out files for go list's -overlay flag, as described -// above. -func (state *golistState) writeOverlays() (filename string, cleanup func(), err error) { -	// Do nothing if there are no overlays in the config. -	if len(state.cfg.Overlay) == 0 { -		return "", func() {}, nil -	} -	dir, err := os.MkdirTemp("", "gopackages-*") -	if err != nil { -		return "", nil, err -	} -	// The caller must clean up this directory, unless this function returns an -	// error. -	cleanup = func() { -		os.RemoveAll(dir) -	} -	defer func() { -		if err != nil { -			cleanup() -		} -	}() -	overlays := map[string]string{} -	for k, v := range state.cfg.Overlay { -		// Create a unique filename for the overlaid files, to avoid -		// creating nested directories. -		noSeparator := strings.Join(strings.Split(filepath.ToSlash(k), "/"), "") -		f, err := os.CreateTemp(dir, fmt.Sprintf("*-%s", noSeparator)) -		if err != nil { -			return "", func() {}, err -		} -		if _, err := f.Write(v); err != nil { -			return "", func() {}, err -		} -		if err := f.Close(); err != nil { -			return "", func() {}, err -		} -		overlays[k] = f.Name() -	} -	b, err := json.Marshal(OverlayJSON{Replace: overlays}) -	if err != nil { -		return "", func() {}, err -	} -	// Write out the overlay file that contains the filepath mappings. -	filename = filepath.Join(dir, "overlay.json") -	if err := os.WriteFile(filename, b, 0665); err != nil { -		return "", func() {}, err -	} -	return filename, cleanup, nil -} -  func containsGoFile(s []string) bool {  	for _, f := range s {  		if strings.HasSuffix(f, ".go") { diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go index 3ea1b3fa4..34306ddd3 100644 --- a/vendor/golang.org/x/tools/go/packages/packages.go +++ b/vendor/golang.org/x/tools/go/packages/packages.go @@ -37,10 +37,20 @@ import (  // A LoadMode controls the amount of detail to return when loading.  // The bits below can be combined to specify which fields should be  // filled in the result packages. +//  // The zero value is a special case, equivalent to combining  // the NeedName, NeedFiles, and NeedCompiledGoFiles bits. +//  // ID and Errors (if present) will always be filled. -// Load may return more information than requested. +// [Load] may return more information than requested. +// +// Unfortunately there are a number of open bugs related to +// interactions among the LoadMode bits: +// - https://github.com/golang/go/issues/48226 +// - https://github.com/golang/go/issues/56633 +// - https://github.com/golang/go/issues/56677 +// - https://github.com/golang/go/issues/58726 +// - https://github.com/golang/go/issues/63517  type LoadMode int  const ( @@ -123,7 +133,14 @@ const (  // A Config specifies details about how packages should be loaded.  // The zero value is a valid configuration. +//  // Calls to Load do not modify this struct. +// +// TODO(adonovan): #67702: this is currently false: in fact, +// calls to [Load] do not modify the public fields of this struct, but +// may modify hidden fields, so concurrent calls to [Load] must not +// use the same Config. But perhaps we should reestablish the +// documented invariant.  type Config struct {  	// Mode controls the level of information returned for each package.  	Mode LoadMode @@ -199,13 +216,23 @@ type Config struct {  	// setting Tests may have no effect.  	Tests bool -	// Overlay provides a mapping of absolute file paths to file contents. -	// If the file with the given path already exists, the parser will use the -	// alternative file contents provided by the map. +	// Overlay is a mapping from absolute file paths to file contents. +	// +	// For each map entry, [Load] uses the alternative file +	// contents provided by the overlay mapping instead of reading +	// from the file system. This mechanism can be used to enable +	// editor-integrated tools to correctly analyze the contents +	// of modified but unsaved buffers, for example.  	// -	// Overlays provide incomplete support for when a given file doesn't -	// already exist on disk. See the package doc above for more details. +	// The overlay mapping is passed to the build system's driver +	// (see "The driver protocol") so that it too can report +	// consistent package metadata about unsaved files. However, +	// drivers may vary in their level of support for overlays.  	Overlay map[string][]byte + +	// goListOverlayFile is the JSON file that encodes the Overlay +	// mapping, used by 'go list -overlay=...' +	goListOverlayFile string  }  // Load loads and returns the Go packages named by the given patterns. @@ -213,6 +240,20 @@ type Config struct {  // Config specifies loading options;  // nil behaves the same as an empty Config.  // +// The [Config.Mode] field is a set of bits that determine what kinds +// of information should be computed and returned. Modes that require +// more information tend to be slower. See [LoadMode] for details +// and important caveats. Its zero value is equivalent to +// NeedName | NeedFiles | NeedCompiledGoFiles. +// +// Each call to Load returns a new set of [Package] instances. +// The Packages and their Imports form a directed acyclic graph. +// +// If the [NeedTypes] mode flag was set, each call to Load uses a new +// [types.Importer], so [types.Object] and [types.Type] values from +// different calls to Load must not be mixed as they will have +// inconsistent notions of type identity. +//  // If any of the patterns was invalid as defined by the  // underlying build system, Load returns an error.  // It may return an empty list of packages without an error, @@ -286,6 +327,17 @@ func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, erro  		// (fall through)  	} +	// go list fallback +	// +	// Write overlays once, as there are many calls +	// to 'go list' (one per chunk plus others too). +	overlay, cleanupOverlay, err := gocommand.WriteOverlays(cfg.Overlay) +	if err != nil { +		return nil, false, err +	} +	defer cleanupOverlay() +	cfg.goListOverlayFile = overlay +  	response, err := callDriverOnChunks(goListDriver, cfg, chunks)  	if err != nil {  		return nil, false, err @@ -365,6 +417,9 @@ func mergeResponses(responses ...*DriverResponse) *DriverResponse {  }  // A Package describes a loaded Go package. +// +// It also defines part of the JSON schema of [DriverResponse]. +// See the package documentation for an overview.  type Package struct {  	// ID is a unique identifier for a package,  	// in a syntax provided by the underlying build system. @@ -423,6 +478,13 @@ type Package struct {  	// to corresponding loaded Packages.  	Imports map[string]*Package +	// Module is the module information for the package if it exists. +	// +	// Note: it may be missing for std and cmd; see Go issue #65816. +	Module *Module + +	// -- The following fields are not part of the driver JSON schema. -- +  	// Types provides type information for the package.  	// The NeedTypes LoadMode bit sets this field for packages matching the  	// patterns; type information for dependencies may be missing or incomplete, @@ -431,15 +493,15 @@ type Package struct {  	// Each call to [Load] returns a consistent set of type  	// symbols, as defined by the comment at [types.Identical].  	// Avoid mixing type information from two or more calls to [Load]. -	Types *types.Package +	Types *types.Package `json:"-"`  	// Fset provides position information for Types, TypesInfo, and Syntax.  	// It is set only when Types is set. -	Fset *token.FileSet +	Fset *token.FileSet `json:"-"`  	// IllTyped indicates whether the package or any dependency contains errors.  	// It is set only when Types is set. -	IllTyped bool +	IllTyped bool `json:"-"`  	// Syntax is the package's syntax trees, for the files listed in CompiledGoFiles.  	// @@ -449,26 +511,28 @@ type Package struct {  	//  	// Syntax is kept in the same order as CompiledGoFiles, with the caveat that nils are  	// removed.  If parsing returned nil, Syntax may be shorter than CompiledGoFiles. -	Syntax []*ast.File +	Syntax []*ast.File `json:"-"`  	// TypesInfo provides type information about the package's syntax trees.  	// It is set only when Syntax is set. -	TypesInfo *types.Info +	TypesInfo *types.Info `json:"-"`  	// TypesSizes provides the effective size function for types in TypesInfo. -	TypesSizes types.Sizes +	TypesSizes types.Sizes `json:"-"` + +	// -- internal --  	// forTest is the package under test, if any.  	forTest string  	// depsErrors is the DepsErrors field from the go list response, if any.  	depsErrors []*packagesinternal.PackageError - -	// module is the module information for the package if it exists. -	Module *Module  }  // Module provides module information for a package. +// +// It also defines part of the JSON schema of [DriverResponse]. +// See the package documentation for an overview.  type Module struct {  	Path      string       // module path  	Version   string       // module version @@ -601,6 +665,7 @@ func (p *Package) UnmarshalJSON(b []byte) error {  		OtherFiles:      flat.OtherFiles,  		EmbedFiles:      flat.EmbedFiles,  		EmbedPatterns:   flat.EmbedPatterns, +		IgnoredFiles:    flat.IgnoredFiles,  		ExportFile:      flat.ExportFile,  	}  	if len(flat.Imports) > 0 { diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/vendor/golang.org/x/tools/internal/gocommand/invoke.go index eb7a8282f..af0ee6c61 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -8,12 +8,14 @@ package gocommand  import (  	"bytes"  	"context" +	"encoding/json"  	"errors"  	"fmt"  	"io"  	"log"  	"os"  	"os/exec" +	"path/filepath"  	"reflect"  	"regexp"  	"runtime" @@ -167,7 +169,9 @@ type Invocation struct {  	// TODO(rfindley): remove, in favor of Args.  	ModFile string -	// If Overlay is set, the go command is invoked with -overlay=Overlay. +	// Overlay is the name of the JSON overlay file that describes +	// unsaved editor buffers; see [WriteOverlays]. +	// If set, the go command is invoked with -overlay=Overlay.  	// TODO(rfindley): remove, in favor of Args.  	Overlay string @@ -255,12 +259,15 @@ func (i *Invocation) run(ctx context.Context, stdout, stderr io.Writer) error {  		waitDelay.Set(reflect.ValueOf(30 * time.Second))  	} -	// On darwin the cwd gets resolved to the real path, which breaks anything that -	// expects the working directory to keep the original path, including the +	// The cwd gets resolved to the real path. On Darwin, where +	// /tmp is a symlink, this breaks anything that expects the +	// working directory to keep the original path, including the  	// go command when dealing with modules. -	// The Go stdlib has a special feature where if the cwd and the PWD are the -	// same node then it trusts the PWD, so by setting it in the env for the child -	// process we fix up all the paths returned by the go command. +	// +	// os.Getwd has a special feature where if the cwd and the PWD +	// are the same node then it trusts the PWD, so by setting it +	// in the env for the child process we fix up all the paths +	// returned by the go command.  	if !i.CleanEnv {  		cmd.Env = os.Environ()  	} @@ -351,6 +358,7 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) {  		}  	} +	startTime := time.Now()  	err = cmd.Start()  	if stdoutW != nil {  		// The child process has inherited the pipe file, @@ -377,7 +385,7 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) {  		case err := <-resChan:  			return err  		case <-timer.C: -			HandleHangingGoCommand(cmd.Process) +			HandleHangingGoCommand(startTime, cmd)  		case <-ctx.Done():  		}  	} else { @@ -411,7 +419,7 @@ func runCmdContext(ctx context.Context, cmd *exec.Cmd) (err error) {  	return <-resChan  } -func HandleHangingGoCommand(proc *os.Process) { +func HandleHangingGoCommand(start time.Time, cmd *exec.Cmd) {  	switch runtime.GOOS {  	case "linux", "darwin", "freebsd", "netbsd":  		fmt.Fprintln(os.Stderr, `DETECTED A HANGING GO COMMAND @@ -444,7 +452,7 @@ See golang/go#54461 for more details.`)  			panic(fmt.Sprintf("running %s: %v", listFiles, err))  		}  	} -	panic(fmt.Sprintf("detected hanging go command (pid %d): see golang/go#54461 for more details", proc.Pid)) +	panic(fmt.Sprintf("detected hanging go command (golang/go#54461); waited %s\n\tcommand:%s\n\tpid:%d", time.Since(start), cmd, cmd.Process.Pid))  }  func cmdDebugStr(cmd *exec.Cmd) string { @@ -468,3 +476,73 @@ func cmdDebugStr(cmd *exec.Cmd) string {  	}  	return fmt.Sprintf("GOROOT=%v GOPATH=%v GO111MODULE=%v GOPROXY=%v PWD=%v %v", env["GOROOT"], env["GOPATH"], env["GO111MODULE"], env["GOPROXY"], env["PWD"], strings.Join(args, " "))  } + +// WriteOverlays writes each value in the overlay (see the Overlay +// field of go/packages.Config) to a temporary file and returns the name +// of a JSON file describing the mapping that is suitable for the "go +// list -overlay" flag. +// +// On success, the caller must call the cleanup function exactly once +// when the files are no longer needed. +func WriteOverlays(overlay map[string][]byte) (filename string, cleanup func(), err error) { +	// Do nothing if there are no overlays in the config. +	if len(overlay) == 0 { +		return "", func() {}, nil +	} + +	dir, err := os.MkdirTemp("", "gocommand-*") +	if err != nil { +		return "", nil, err +	} + +	// The caller must clean up this directory, +	// unless this function returns an error. +	// (The cleanup operand of each return +	// statement below is ignored.) +	defer func() { +		cleanup = func() { +			os.RemoveAll(dir) +		} +		if err != nil { +			cleanup() +			cleanup = nil +		} +	}() + +	// Write each map entry to a temporary file. +	overlays := make(map[string]string) +	for k, v := range overlay { +		// Use a unique basename for each file (001-foo.go), +		// to avoid creating nested directories. +		base := fmt.Sprintf("%d-%s.go", 1+len(overlays), filepath.Base(k)) +		filename := filepath.Join(dir, base) +		err := os.WriteFile(filename, v, 0666) +		if err != nil { +			return "", nil, err +		} +		overlays[k] = filename +	} + +	// Write the JSON overlay file that maps logical file names to temp files. +	// +	// OverlayJSON is the format overlay files are expected to be in. +	// The Replace map maps from overlaid paths to replacement paths: +	// the Go command will forward all reads trying to open +	// each overlaid path to its replacement path, or consider the overlaid +	// path not to exist if the replacement path is empty. +	// +	// From golang/go#39958. +	type OverlayJSON struct { +		Replace map[string]string `json:"replace,omitempty"` +	} +	b, err := json.Marshal(OverlayJSON{Replace: overlays}) +	if err != nil { +		return "", nil, err +	} +	filename = filepath.Join(dir, "overlay.json") +	if err := os.WriteFile(filename, b, 0666); err != nil { +		return "", nil, err +	} + +	return filename, nil, nil +} diff --git a/vendor/golang.org/x/tools/internal/imports/fix.go b/vendor/golang.org/x/tools/internal/imports/fix.go index 93d49a6ef..4569313a0 100644 --- a/vendor/golang.org/x/tools/internal/imports/fix.go +++ b/vendor/golang.org/x/tools/internal/imports/fix.go @@ -104,7 +104,10 @@ type packageInfo struct {  // parseOtherFiles parses all the Go files in srcDir except filename, including  // test files if filename looks like a test. -func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File { +// +// It returns an error only if ctx is cancelled. Files with parse errors are +// ignored. +func parseOtherFiles(ctx context.Context, fset *token.FileSet, srcDir, filename string) ([]*ast.File, error) {  	// This could use go/packages but it doesn't buy much, and it fails  	// with https://golang.org/issue/26296 in LoadFiles mode in some cases.  	considerTests := strings.HasSuffix(filename, "_test.go") @@ -112,11 +115,14 @@ func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File {  	fileBase := filepath.Base(filename)  	packageFileInfos, err := os.ReadDir(srcDir)  	if err != nil { -		return nil +		return nil, ctx.Err()  	}  	var files []*ast.File  	for _, fi := range packageFileInfos { +		if ctx.Err() != nil { +			return nil, ctx.Err() +		}  		if fi.Name() == fileBase || !strings.HasSuffix(fi.Name(), ".go") {  			continue  		} @@ -132,7 +138,7 @@ func parseOtherFiles(fset *token.FileSet, srcDir, filename string) []*ast.File {  		files = append(files, f)  	} -	return files +	return files, ctx.Err()  }  // addGlobals puts the names of package vars into the provided map. @@ -557,12 +563,7 @@ func (p *pass) addCandidate(imp *ImportInfo, pkg *packageInfo) {  // fixImports adds and removes imports from f so that all its references are  // satisfied and there are no unused imports. -// -// This is declared as a variable rather than a function so goimports can -// easily be extended by adding a file with an init function. -var fixImports = fixImportsDefault - -func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error { +func fixImports(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error {  	fixes, err := getFixes(context.Background(), fset, f, filename, env)  	if err != nil {  		return err @@ -592,7 +593,10 @@ func getFixes(ctx context.Context, fset *token.FileSet, f *ast.File, filename st  		return fixes, nil  	} -	otherFiles := parseOtherFiles(fset, srcDir, filename) +	otherFiles, err := parseOtherFiles(ctx, fset, srcDir, filename) +	if err != nil { +		return nil, err +	}  	// Second pass: add information from other files in the same package,  	// like their package vars and imports. @@ -1192,7 +1196,7 @@ func addExternalCandidates(ctx context.Context, pass *pass, refs references, fil  	if err != nil {  		return err  	} -	if err = resolver.scan(context.Background(), callback); err != nil { +	if err = resolver.scan(ctx, callback); err != nil {  		return err  	} @@ -1203,7 +1207,7 @@ func addExternalCandidates(ctx context.Context, pass *pass, refs references, fil  	}  	results := make(chan result, len(refs)) -	ctx, cancel := context.WithCancel(context.TODO()) +	ctx, cancel := context.WithCancel(ctx)  	var wg sync.WaitGroup  	defer func() {  		cancel() diff --git a/vendor/golang.org/x/tools/internal/versions/types_go122.go b/vendor/golang.org/x/tools/internal/versions/types_go122.go index e8180632a..aac5db62c 100644 --- a/vendor/golang.org/x/tools/internal/versions/types_go122.go +++ b/vendor/golang.org/x/tools/internal/versions/types_go122.go @@ -12,7 +12,7 @@ import (  	"go/types"  ) -// FileVersions returns a file's Go version. +// FileVersion returns a file's Go version.  // The reported version is an unknown Future version if a  // version cannot be determined.  func FileVersion(info *types.Info, file *ast.File) string { diff --git a/vendor/modules.txt b/vendor/modules.txt index 37081e923..649ddbf25 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -482,7 +482,7 @@ github.com/mattn/go-isatty  ## explicit; go 1.21  github.com/microcosm-cc/bluemonday  github.com/microcosm-cc/bluemonday/css -# github.com/miekg/dns v1.1.59 +# github.com/miekg/dns v1.1.61  ## explicit; go 1.19  github.com/miekg/dns  # github.com/minio/md5-simd v1.1.2 @@ -1079,7 +1079,7 @@ golang.org/x/image/tiff/lzw  golang.org/x/image/vp8  golang.org/x/image/vp8l  golang.org/x/image/webp -# golang.org/x/mod v0.17.0 +# golang.org/x/mod v0.18.0  ## explicit; go 1.18  golang.org/x/mod/internal/lazyregexp  golang.org/x/mod/module @@ -1140,7 +1140,7 @@ golang.org/x/text/transform  golang.org/x/text/unicode/bidi  golang.org/x/text/unicode/norm  golang.org/x/text/width -# golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d +# golang.org/x/tools v0.22.0  ## explicit; go 1.19  golang.org/x/tools/go/ast/astutil  golang.org/x/tools/go/gcexportdata | 
