rpm.eclass: don't die if grep errors out when detecting payload

While in theory, exquisitely timed memory exhaustion may result in grep,
and only grep, failing... in practice:

- we must handle "no match"

- "no match" simply determines which of two extraction tools to use, and
  if we choose wrongly, the tool will fail and the ebuild will still die

I guess this mean the *.src.rpm workaround was unnecessary too.

Closes: https://bugs.gentoo.org/973157
Signed-off-by: Eli Schwartz <eschwartz@gentoo.org>
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Eli Schwartz
2026-04-24 17:46:56 -04:00
committed by Sam James
parent cafda39787
commit 822c5eda4b

View File

@@ -98,11 +98,11 @@ rpm_unpack() {
fi
local payload= usedep=""
if [[ ${a} = *.src.rpm ]]; then
payload=none
else
payload=$($(tc-getSTRINGS) "${a}" | grep -o 'PayloadIs[a-zA-Z]*'; pipestatus || die "failed to grep rpm payload")
fi
# grep may fail because no payload or because "unknown error", and distinguishing between
# the two is problematic. We do a token check that strings works, but rely on rpm failing
# with its own well-formed die if we erroneously decide no payload USE flag is needed due
# to external commands failing.
payload=$($(tc-getSTRINGS) "${a}" | grep -o 'PayloadIs[a-zA-Z]*'; if [[ ${PIPESTATUS[0]} != 0 ]]; then die "strings failed"; fi)
case ${payload} in
"") payload=none;; # gzip/uncompressed