The Wire · Showcase
GOPLS SANDBOX GETS EMERGENCY STABILITY FIX AS PLAYGROUND OVERHAULS DEPLOYMENT
By RepoJournal · Filed · About Go
The playground sandbox can no longer hang on container timeouts, and gopls is cleaning up internal linkname hacks that were recipes for trouble.
The playground sandbox now closes its pipe writer when containers timeout or exit, unblocking pending reads that were causing the entire process to hang [1]. This is paired with a broader sandbox modernization: Docker installation now uses the official apt repository instead of deprecated utilities, the Makefile supports dynamic image tags, and Container-Optimized OS deployments have switched from the defunct gce-container-declaration (Konlet) metadata to native systemd services [2] [3]. On the tools side, gopls is eliminating technical debt by inverting the import relationship between typesinternal and typeutil, removing the linkname hack that was a vulnerability vector and simplifying ForEachElement to eliminate the TypeMap dependency [4]. The semantic tokens implementation got two coordinated fixes: gopls now respects client capabilities for token types and modifiers [5], with release notes properly documented [6]. Smaller but important: the embedlit modernizer no longer introduces syntax errors on multi-assignment initializations [7], freesymbols switched to html/template to eliminate escaping mistakes [8], and the dns/dnsmessage parser added boundary checks to prevent out-of-bounds reads on malformed SVCB records [9].
Action items
- → Deploy playground sandbox update before next rollout to prevent container timeout hangs golang/playground [immediate]
- → Update to latest gopls with semantic token client capability fixes if you use LSP golang/tools [plan]
- → Monitor dns/dnsmessage usage if you parse untrusted DNS records golang/net [monitor]
References
- [1] sandbox: prevent startContainer from hanging on timeout golang/playground
- [2] sandbox: parameterize image tags and update docker install golang/playground
- [3] sandbox: replace deprecated Konlet with systemd service in cloud-init golang/playground
- [4] internal/typesinternal: avoid linkname hacks golang/tools
- [5] gopls: respect client capabilities for semtok enabled tokens and mods golang/tools
- [6] gopls/doc/release: semtok ClientCapabilities change release notes golang/tools
- [7] go/analysis/passes/modernize: embedlit - skip multi assigns and decls golang/tools
- [8] gopls/internal/golang: freesymbols: use html/template golang/tools
- [9] dns/dnsmessage: add boundary check in unpackSVCBResource golang/net