Packages with a large number of EGO_SUM entries, i.e., many thousands,
cause SRC_URI, and in turn A, to become quite large. Prevent issues that
are caused by large environment variables, e.g., execve() errors (see
bug #719203), by ensuring that A stays below a reasonable size.

Signed-off-by: Florian Schmaus <f...@gentoo.org>
---
 eclass/go-module.eclass | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/eclass/go-module.eclass b/eclass/go-module.eclass
index 8047d498b08d..88414b7e9459 100644
--- a/eclass/go-module.eclass
+++ b/eclass/go-module.eclass
@@ -377,6 +377,15 @@ _go-module_src_unpack_gosum() {
                die "go-module_set_globals must be called in global scope"
        fi
 
+       local -i a_size="${#A}"
+       # Environment variables must not exceed MAX_ARG_STRLEN (128 KiB) on
+       # Linux, or otherwise execve() may fail. Ensure that A stays below
+       # this value. See also https://bugs.gentoo.org/719202#c16
+       if [[ ${a_size} -gt 114688 ]]; then
+               # A is larger than 112 KiB.
+               die "Size of A variable (${a_size} bytes) is too large. Please 
use a dependency tarball instead of EGO_SUM."
+       fi
+
        local goproxy_dir="${GOPROXY/file:\/\//}"
        mkdir -p "${goproxy_dir}" || die
 
-- 
2.35.1


Reply via email to